Chaste Commit::8b5d759ac2eb95e67ae57699734101efccb0a0a9
OpenSimplex2S.cpp
Go to the documentation of this file.
1
21#include "OpenSimplex2S.hpp"
22
24OpenSimplex2S::Grad3 OpenSimplex2S::GRADIENTS_3D[OpenSimplex2S::PSIZE] {};
25OpenSimplex2S::Grad4 OpenSimplex2S::GRADIENTS_4D[OpenSimplex2S::PSIZE] {};
26
27OpenSimplex2S::LatticePoint2D OpenSimplex2S::LOOKUP_2D[8 * 4] {};
28OpenSimplex2S::LatticePoint3D OpenSimplex2S::LOOKUP_3D[8] {};
29OpenSimplex2S::LatticePoint4D OpenSimplex2S::LOOKUP_4D[256][20] {};
30unsigned char OpenSimplex2S::LOOKUP_4D_SIZE[256] {};
31
32OpenSimplex2S::Initializer::Initializer()
33{
34 OpenSimplex2S::initLatticePoints();
35 OpenSimplex2S::initGradients();
36}
37
38OpenSimplex2S::Initializer OpenSimplex2S::initializer {};
39
40OpenSimplex2S::OpenSimplex2S(long seed)
41{
42 short source[PSIZE] {};
43 for (short i = 0; i < PSIZE; i++) {
44 source[i] = i;
45 }
46 for (int i = PSIZE - 1; i >= 0; i--) {
47 seed = seed * 6364136223846793005L + 1442695040888963407L;
48 int r = static_cast<int>((seed + 31) % (i + 1));
49 if (r < 0) {
50 r += (i + 1);
51 }
52 perm[i] = source[r];
53 permGrad2[i] = GRADIENTS_2D[perm[i]];
54 permGrad3[i] = GRADIENTS_3D[perm[i]];
55 permGrad4[i] = GRADIENTS_4D[perm[i]];
56 source[r] = source[i];
57 }
58}
59
63double OpenSimplex2S::noise2(double x, double y)
64{
65 // Get points for A2* lattice
66 double s = 0.366025403784439 * (x + y);
67 double xs = x + s;
68 double ys = y + s;
69
70 return noise2_Base(xs, ys);
71}
72
78double OpenSimplex2S::noise2_XBeforeY(double x, double y)
79{
80 // Skew transform and rotation baked into one.
81 double xx = x * 0.7071067811865476;
82 double yy = y * 1.224744871380249;
83
84 return noise2_Base(yy + xx, yy - xx);
85}
86
91double OpenSimplex2S::noise2_Base(double xs, double ys)
92{
93 double value = 0;
94
95 // Get base points and offsets
96 int xsb = fastFloor(xs);
97 int ysb = fastFloor(ys);
98 double xsi = xs - xsb;
99 double ysi = ys - ysb;
100
101 // Index to point list
102 int a = static_cast<int>(xsi + ysi);
103 int index = (a << 2) | static_cast<int>(xsi - ysi / 2 + 1 - a / 2.0) << 3
104 | static_cast<int>(ysi - xsi / 2 + 1 - a / 2.0) << 4;
105
106 double ssi = (xsi + ysi) * -0.211324865405187;
107 double xi = xsi + ssi;
108 double yi = ysi + ssi;
109
110 // Point contributions
111 for (int i = 0; i < 4; i++) {
112 LatticePoint2D c = LOOKUP_2D[index + i];
113
114 double dx = xi + c.dx;
115 double dy = yi + c.dy;
116 double attn = 2.0 / 3.0 - dx * dx - dy * dy;
117 if (attn <= 0) {
118 continue;
119 }
120
121 int pxm = (xsb + c.xsv) & PMASK;
122 int pym = (ysb + c.ysv) & PMASK;
123 Grad2 grad = permGrad2[perm[pxm] ^ pym];
124 double extrapolation = grad.dx * dx + grad.dy * dy;
125
126 attn *= attn;
127 value += attn * attn * extrapolation;
128 }
129
130 return value;
131}
132
139double OpenSimplex2S::noise3_Classic(double x, double y, double z)
140{
141 // Re-orient the cubic lattices via rotation, to produce the expected look on cardinal planar
142 // slices. If texturing objects that don't tend to have cardinal plane faces, you could even
143 // remove this. Orthonormal rotation. Not a skew transform.
144 double r = (2.0 / 3.0) * (x + y + z);
145 double xr = r - x;
146 double yr = r - y;
147 double zr = r - z;
148
149 // Evaluate both lattices to form a BCC lattice.
150 return noise3_BCC(xr, yr, zr);
151}
152
161double OpenSimplex2S::noise3_XYBeforeZ(double x, double y, double z)
162{
163 // Re-orient the cubic lattices without skewing, to make X and Y triangular like 2D.
164 // Orthonormal rotation. Not a skew transform.
165 double xy = x + y;
166 double s2 = xy * -0.211324865405187;
167 double zz = z * 0.577350269189626;
168 double xr = x + s2 - zz;
169 double yr = y + s2 - zz;
170 double zr = xy * 0.577350269189626 + zz;
171
172 // Evaluate both lattices to form a BCC lattice.
173 return noise3_BCC(xr, yr, zr);
174}
175
184double OpenSimplex2S::noise3_XZBeforeY(double x, double y, double z)
185{
186 // Re-orient the cubic lattices without skewing, to make X and Z triangular like 2D.
187 // Orthonormal rotation. Not a skew transform.
188 double xz = x + z;
189 double s2 = xz * -0.211324865405187;
190 double yy = y * 0.577350269189626;
191 double xr = x + s2 - yy;
192 double zr = z + s2 - yy;
193 double yr = xz * 0.577350269189626 + yy;
194
195 // Evaluate both lattices to form a BCC lattice.
196 return noise3_BCC(xr, yr, zr);
197}
198
205double OpenSimplex2S::noise3_BCC(double xr, double yr, double zr)
206{
207 // Get base and offsets inside cube of first lattice.
208 int xrb = fastFloor(xr);
209 int yrb = fastFloor(yr);
210 int zrb = fastFloor(zr);
211 double xri = xr - xrb;
212 double yri = yr - yrb;
213 double zri = zr - zrb;
214
215 // Identify which octant of the cube we're in. This determines which cell
216 // in the other cubic lattice we're in, and also narrows down one point on each.
217 int xht = static_cast<int>(xri + 0.5);
218 int yht = static_cast<int>(yri + 0.5);
219 int zht = static_cast<int>(zri + 0.5);
220 int index = (xht << 0) | (yht << 1) | (zht << 2);
221
222 // Point contributions
223 double value = 0;
224 LatticePoint3D* c = &LOOKUP_3D[index];
225 while (c != nullptr) {
226 double dxr = xri + c->dxr;
227 double dyr = yri + c->dyr;
228 double dzr = zri + c->dzr;
229 double attn = 0.75 - dxr * dxr - dyr * dyr - dzr * dzr;
230 if (attn < 0) {
231 c = c->nextOnFailure.get();
232 } else {
233 int pxm = (xrb + c->xrv) & PMASK;
234 int pym = (yrb + c->yrv) & PMASK;
235 int pzm = (zrb + c->zrv) & PMASK;
236 Grad3 grad = permGrad3[perm[perm[pxm] ^ pym] ^ pzm];
237 double extrapolation = grad.dx * dxr + grad.dy * dyr + grad.dz * dzr;
238
239 attn *= attn;
240 value += attn * attn * extrapolation;
241 c = c->nextOnSuccess.get();
242 }
243 }
244 return value;
245}
246
250double OpenSimplex2S::noise4_Classic(double x, double y, double z, double w)
251{
252 // Get points for A4 lattice
253 double s = 0.309016994374947 * (x + y + z + w);
254 double xs = x + s;
255 double ys = y + s;
256 double zs = z + s;
257 double ws = w + s;
258
259 return noise4_Base(xs, ys, zs, ws);
260}
261
267double OpenSimplex2S::noise4_XYBeforeZW(double x, double y, double z, double w)
268{
269 double s2 = (x + y) * -0.28522513987434876941 + (z + w) * 0.83897065470611435718;
270 double t2 = (z + w) * 0.21939749883706435719 + (x + y) * -0.48214856493302476942;
271 double xs = x + s2;
272 double ys = y + s2;
273 double zs = z + t2;
274 double ws = w + t2;
275
276 return noise4_Base(xs, ys, zs, ws);
277}
278
283double OpenSimplex2S::noise4_XZBeforeYW(double x, double y, double z, double w)
284{
285 double s2 = (x + z) * -0.28522513987434876941 + (y + w) * 0.83897065470611435718;
286 double t2 = (y + w) * 0.21939749883706435719 + (x + z) * -0.48214856493302476942;
287 double xs = x + s2;
288 double ys = y + t2;
289 double zs = z + s2;
290 double ws = w + t2;
291
292 return noise4_Base(xs, ys, zs, ws);
293}
294
300double OpenSimplex2S::noise4_XYZBeforeW(double x, double y, double z, double w)
301{
302 double xyz = x + y + z;
303 double ww = w * 1.118033988749894;
304 double s2 = xyz * -0.16666666666666666 + ww;
305 double xs = x + s2;
306 double ys = y + s2;
307 double zs = z + s2;
308 double ws = -0.5 * xyz + ww;
309
310 return noise4_Base(xs, ys, zs, ws);
311}
312
319double OpenSimplex2S::noise4_Base(double xs, double ys, double zs, double ws)
320{
321 double value = 0;
322
323 // Get base points and offsets
324 int xsb = fastFloor(xs);
325 int ysb = fastFloor(ys);
326 int zsb = fastFloor(zs);
327 int wsb = fastFloor(ws);
328 double xsi = xs - xsb;
329 double ysi = ys - ysb;
330 double zsi = zs - zsb;
331 double wsi = ws - wsb;
332
333 // Unskewed offsets
334 double ssi = (xsi + ysi + zsi + wsi) * -0.138196601125011;
335 double xi = xsi + ssi;
336 double yi = ysi + ssi;
337 double zi = zsi + ssi;
338 double wi = wsi + ssi;
339
340 int index = ((fastFloor(xs * 4) & 3) << 0) | ((fastFloor(ys * 4) & 3) << 2)
341 | ((fastFloor(zs * 4) & 3) << 4) | ((fastFloor(ws * 4) & 3) << 6);
342
343 // Point contributions
344 for (int i = 0; i < LOOKUP_4D_SIZE[index]; ++i) {
345 auto& c = LOOKUP_4D[index][i];
346 double dx = xi + c.dx;
347 double dy = yi + c.dy;
348 double dz = zi + c.dz;
349 double dw = wi + c.dw;
350 double attn = 0.8 - dx * dx - dy * dy - dz * dz - dw * dw;
351 if (attn > 0) {
352 attn *= attn;
353
354 int pxm = (xsb + c.xsv) & PMASK;
355 int pym = (ysb + c.ysv) & PMASK;
356 int pzm = (zsb + c.zsv) & PMASK;
357 int pwm = (wsb + c.wsv) & PMASK;
358 Grad4 grad = permGrad4[perm[perm[perm[pxm] ^ pym] ^ pzm] ^ pwm];
359 double extrapolation = grad.dx * dx + grad.dy * dy + grad.dz * dz + grad.dw * dw;
360
361 value += attn * attn * extrapolation;
362 }
363 }
364 return value;
365}
366
367int OpenSimplex2S::fastFloor(double x)
368{
369 int xi = static_cast<int>(x);
370 return x < xi ? xi - 1 : xi;
371}
372
373OpenSimplex2S::LatticePoint2D::LatticePoint2D(int a_xsv, int a_ysv)
374{
375 xsv = a_xsv;
376 ysv = a_ysv;
377 double ssv = (a_xsv + a_ysv) * -0.211324865405187;
378 dx = -a_xsv - ssv;
379 dy = -a_ysv - ssv;
380}
381
382OpenSimplex2S::LatticePoint2D::LatticePoint2D() = default;
383
384OpenSimplex2S::LatticePoint3D::LatticePoint3D(int a_xrv, int a_yrv, int a_zrv, int lattice)
385{
386 dxr = -a_xrv + lattice * 0.5;
387 dyr = -a_yrv + lattice * 0.5;
388 dzr = -a_zrv + lattice * 0.5;
389 xrv = a_xrv + lattice * 1024;
390 yrv = a_yrv + lattice * 1024;
391 zrv = a_zrv + lattice * 1024;
392}
393
394OpenSimplex2S::LatticePoint3D::LatticePoint3D() = default;
395
396OpenSimplex2S::LatticePoint4D::LatticePoint4D(int a_xsv, int a_ysv, int a_zsv, int a_wsv)
397{
398 xsv = a_xsv;
399 ysv = a_ysv;
400 zsv = a_zsv;
401 wsv = a_wsv;
402 double ssv = (a_xsv + a_ysv + a_zsv + a_wsv) * -0.138196601125011;
403 dx = -a_xsv - ssv;
404 dy = -a_ysv - ssv;
405 dz = -a_zsv - ssv;
406 dw = -a_wsv - ssv;
407}
408
409OpenSimplex2S::LatticePoint4D::LatticePoint4D() = default;
410
411void OpenSimplex2S::initLatticePoints()
412{
413 for (int i = 0; i < 8; i++) {
414 int i1, j1, i2, j2;
415 if ((i & 1) == 0) {
416 if ((i & 2) == 0) {
417 i1 = -1;
418 j1 = 0;
419 } else {
420 i1 = 1;
421 j1 = 0;
422 }
423 if ((i & 4) == 0) {
424 i2 = 0;
425 j2 = -1;
426 } else {
427 i2 = 0;
428 j2 = 1;
429 }
430 } else {
431 if ((i & 2) != 0) {
432 i1 = 2;
433 j1 = 1;
434 } else {
435 i1 = 0;
436 j1 = 1;
437 }
438 if ((i & 4) != 0) {
439 i2 = 1;
440 j2 = 2;
441 } else {
442 i2 = 1;
443 j2 = 0;
444 }
445 }
446 LOOKUP_2D[i * 4 + 0] = { 0, 0 };
447 LOOKUP_2D[i * 4 + 1] = { 1, 1 };
448 LOOKUP_2D[i * 4 + 2] = { i1, j1 };
449 LOOKUP_2D[i * 4 + 3] = { i2, j2 };
450 }
451
452 for (int i = 0; i < 8; i++) {
453 int i1, j1, k1, i2, j2, k2;
454 i1 = (i >> 0) & 1;
455 j1 = (i >> 1) & 1;
456 k1 = (i >> 2) & 1;
457 i2 = i1 ^ 1;
458 j2 = j1 ^ 1;
459 k2 = k1 ^ 1;
460
461 // The two points within this octant, one from each of the two cubic half-lattices.
462 auto c0 = std::make_shared<LatticePoint3D>(i1, j1, k1, 0);
463 auto c1 = std::make_shared<LatticePoint3D>(i1 + i2, j1 + j2, k1 + k2, 1);
464
465 // (1, 0, 0) vs (0, 1, 1) away from octant.
466 auto c2 = std::make_shared<LatticePoint3D>(i1 ^ 1, j1, k1, 0);
467 auto c3 = std::make_shared<LatticePoint3D>(i1, j1 ^ 1, k1 ^ 1, 0);
468
469 // (1, 0, 0) vs (0, 1, 1) away from octant, on second half-lattice.
470 auto c4 = std::make_shared<LatticePoint3D>(i1 + (i2 ^ 1), j1 + j2, k1 + k2, 1);
471 auto c5 = std::make_shared<LatticePoint3D>(i1 + i2, j1 + (j2 ^ 1), k1 + (k2 ^ 1), 1);
472
473 // (0, 1, 0) vs (1, 0, 1) away from octant.
474 auto c6 = std::make_shared<LatticePoint3D>(i1, j1 ^ 1, k1, 0);
475 auto c7 = std::make_shared<LatticePoint3D>(i1 ^ 1, j1, k1 ^ 1, 0);
476
477 // (0, 1, 0) vs (1, 0, 1) away from octant, on second half-lattice.
478 auto c8 = std::make_shared<LatticePoint3D>(i1 + i2, j1 + (j2 ^ 1), k1 + k2, 1);
479 auto c9 = std::make_shared<LatticePoint3D>(i1 + (i2 ^ 1), j1 + j2, k1 + (k2 ^ 1), 1);
480
481 // (0, 0, 1) vs (1, 1, 0) away from octant.
482 auto cA = std::make_shared<LatticePoint3D>(i1, j1, k1 ^ 1, 0);
483 auto cB = std::make_shared<LatticePoint3D>(i1 ^ 1, j1 ^ 1, k1, 0);
484
485 // (0, 0, 1) vs (1, 1, 0) away from octant, on second half-lattice.
486 auto cC = std::make_shared<LatticePoint3D>(i1 + i2, j1 + j2, k1 + (k2 ^ 1), 1);
487 auto cD = std::make_shared<LatticePoint3D>(i1 + (i2 ^ 1), j1 + (j2 ^ 1), k1 + k2, 1);
488
489 // First two points are guaranteed.
490 c0->nextOnFailure = c0->nextOnSuccess = c1;
491 c1->nextOnFailure = c1->nextOnSuccess = c2;
492
493 // If c2 is in range, then we know c3 and c4 are not.
494 c2->nextOnFailure = c3;
495 c2->nextOnSuccess = c5;
496 c3->nextOnFailure = c4;
497 c3->nextOnSuccess = c4;
498
499 // If c4 is in range, then we know c5 is not.
500 c4->nextOnFailure = c5;
501 c4->nextOnSuccess = c6;
502 c5->nextOnFailure = c5->nextOnSuccess = c6;
503
504 // If c6 is in range, then we know c7 and c8 are not.
505 c6->nextOnFailure = c7;
506 c6->nextOnSuccess = c9;
507 c7->nextOnFailure = c8;
508 c7->nextOnSuccess = c8;
509
510 // If c8 is in range, then we know c9 is not.
511 c8->nextOnFailure = c9;
512 c8->nextOnSuccess = cA;
513 c9->nextOnFailure = c9->nextOnSuccess = cA;
514
515 // If cA is in range, then we know cB and cC are not.
516 cA->nextOnFailure = cB;
517 cA->nextOnSuccess = cD;
518 cB->nextOnFailure = cC;
519 cB->nextOnSuccess = cC;
520
521 // If cC is in range, then we know cD is not.
522 cC->nextOnFailure = cD;
523 cC->nextOnSuccess = nullptr;
524 cD->nextOnFailure = cD->nextOnSuccess = nullptr;
525
526 LOOKUP_3D[i] = *c0;
527 }
528
529 unsigned char lookup4DPregenSize[256] {
530 // clang-format off
531 20, 15, 16, 17, 15, 16, 12, 15, 16, 12, 10, 14, 17, 15, 14, 17,
532 15, 16, 12, 15, 16, 14, 14, 13, 12, 14, 11, 12, 15, 13, 12, 14,
533 16, 12, 10, 14, 12, 14, 11, 12, 10, 11, 10, 13, 14, 12, 13, 15,
534 17, 15, 14, 17, 15, 13, 12, 14, 14, 12, 13, 15, 17, 14, 15, 17,
535 15, 16, 12, 15, 16, 14, 14, 13, 12, 14, 11, 12, 15, 13, 12, 14,
536 16, 14, 14, 13, 14, 16, 16, 10, 14, 16, 19, 11, 13, 10, 11, 10,
537 12, 14, 11, 12, 14, 16, 19, 11, 11, 19, 13, 14, 12, 11, 14, 13,
538 15, 13, 12, 14, 13, 10, 11, 10, 12, 11, 14, 13, 14, 10, 13, 13,
539 16, 12, 10, 14, 12, 14, 11, 12, 10, 11, 10, 13, 14, 12, 13, 15,
540 12, 14, 11, 12, 14, 16, 19, 11, 11, 19, 13, 14, 12, 11, 14, 13,
541 10, 11, 10, 13, 11, 19, 13, 14, 10, 13, 16, 14, 13, 14, 14, 16,
542 14, 12, 13, 15, 12, 11, 14, 13, 13, 14, 14, 16, 15, 13, 16, 15,
543 17, 15, 14, 17, 15, 13, 12, 14, 14, 12, 13, 15, 17, 14, 15, 17,
544 15, 13, 12, 14, 13, 10, 11, 10, 12, 11, 14, 13, 14, 10, 13, 13,
545 14, 12, 13, 15, 12, 11, 14, 13, 13, 14, 14, 16, 15, 13, 16, 15,
546 17, 14, 15, 17, 14, 10, 13, 13, 15, 13, 16, 15, 17, 13, 15, 20,
547 // clang-format on
548 };
549
550 unsigned char lookup4DPregen[256][20] {
551 // clang-format off
552 { 0x15, 0x45, 0x51, 0x54, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA },
553 { 0x15, 0x45, 0x51, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x6A, 0x95, 0x96, 0x9A, 0xA6, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00 },
554 { 0x01, 0x05, 0x11, 0x15, 0x41, 0x45, 0x51, 0x55, 0x56, 0x5A, 0x66, 0x6A, 0x96, 0x9A, 0xA6, 0xAA, 0x00, 0x00, 0x00, 0x00 },
555 { 0x01, 0x15, 0x16, 0x45, 0x46, 0x51, 0x52, 0x55, 0x56, 0x5A, 0x66, 0x6A, 0x96, 0x9A, 0xA6, 0xAA, 0xAB, 0x00, 0x00, 0x00 },
556 { 0x15, 0x45, 0x54, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x69, 0x6A, 0x95, 0x99, 0x9A, 0xA9, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00 },
557 { 0x05, 0x15, 0x45, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xAA, 0x00, 0x00, 0x00, 0x00 },
558 { 0x05, 0x15, 0x45, 0x55, 0x56, 0x59, 0x5A, 0x66, 0x6A, 0x96, 0x9A, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
559 { 0x05, 0x15, 0x16, 0x45, 0x46, 0x55, 0x56, 0x59, 0x5A, 0x66, 0x6A, 0x96, 0x9A, 0xAA, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00 },
560 { 0x04, 0x05, 0x14, 0x15, 0x44, 0x45, 0x54, 0x55, 0x59, 0x5A, 0x69, 0x6A, 0x99, 0x9A, 0xA9, 0xAA, 0x00, 0x00, 0x00, 0x00 },
561 { 0x05, 0x15, 0x45, 0x55, 0x56, 0x59, 0x5A, 0x69, 0x6A, 0x99, 0x9A, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
562 { 0x05, 0x15, 0x45, 0x55, 0x56, 0x59, 0x5A, 0x6A, 0x9A, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
563 { 0x05, 0x15, 0x16, 0x45, 0x46, 0x55, 0x56, 0x59, 0x5A, 0x5B, 0x6A, 0x9A, 0xAA, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
564 { 0x04, 0x15, 0x19, 0x45, 0x49, 0x54, 0x55, 0x58, 0x59, 0x5A, 0x69, 0x6A, 0x99, 0x9A, 0xA9, 0xAA, 0xAE, 0x00, 0x00, 0x00 },
565 { 0x05, 0x15, 0x19, 0x45, 0x49, 0x55, 0x56, 0x59, 0x5A, 0x69, 0x6A, 0x99, 0x9A, 0xAA, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x00 },
566 { 0x05, 0x15, 0x19, 0x45, 0x49, 0x55, 0x56, 0x59, 0x5A, 0x5E, 0x6A, 0x9A, 0xAA, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
567 { 0x05, 0x15, 0x1A, 0x45, 0x4A, 0x55, 0x56, 0x59, 0x5A, 0x5B, 0x5E, 0x6A, 0x9A, 0xAA, 0xAB, 0xAE, 0xAF, 0x00, 0x00, 0x00 },
568 { 0x15, 0x51, 0x54, 0x55, 0x56, 0x59, 0x65, 0x66, 0x69, 0x6A, 0x95, 0xA5, 0xA6, 0xA9, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00 },
569 { 0x11, 0x15, 0x51, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x96, 0xA5, 0xA6, 0xAA, 0x00, 0x00, 0x00, 0x00 },
570 { 0x11, 0x15, 0x51, 0x55, 0x56, 0x5A, 0x65, 0x66, 0x6A, 0x96, 0xA6, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
571 { 0x11, 0x15, 0x16, 0x51, 0x52, 0x55, 0x56, 0x5A, 0x65, 0x66, 0x6A, 0x96, 0xA6, 0xAA, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00 },
572 { 0x14, 0x15, 0x54, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x99, 0xA5, 0xA9, 0xAA, 0x00, 0x00, 0x00, 0x00 },
573 { 0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x9A, 0xA6, 0xA9, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
574 { 0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x96, 0x9A, 0xA6, 0xAA, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
575 { 0x15, 0x16, 0x55, 0x56, 0x5A, 0x66, 0x6A, 0x6B, 0x96, 0x9A, 0xA6, 0xAA, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
576 { 0x14, 0x15, 0x54, 0x55, 0x59, 0x5A, 0x65, 0x69, 0x6A, 0x99, 0xA9, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
577 { 0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x99, 0x9A, 0xA9, 0xAA, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
578 { 0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x9A, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
579 { 0x15, 0x16, 0x55, 0x56, 0x59, 0x5A, 0x66, 0x6A, 0x6B, 0x9A, 0xAA, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
580 { 0x14, 0x15, 0x19, 0x54, 0x55, 0x58, 0x59, 0x5A, 0x65, 0x69, 0x6A, 0x99, 0xA9, 0xAA, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x00 },
581 { 0x15, 0x19, 0x55, 0x59, 0x5A, 0x69, 0x6A, 0x6E, 0x99, 0x9A, 0xA9, 0xAA, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
582 { 0x15, 0x19, 0x55, 0x56, 0x59, 0x5A, 0x69, 0x6A, 0x6E, 0x9A, 0xAA, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
583 { 0x15, 0x1A, 0x55, 0x56, 0x59, 0x5A, 0x6A, 0x6B, 0x6E, 0x9A, 0xAA, 0xAB, 0xAE, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
584 { 0x10, 0x11, 0x14, 0x15, 0x50, 0x51, 0x54, 0x55, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA6, 0xA9, 0xAA, 0x00, 0x00, 0x00, 0x00 },
585 { 0x11, 0x15, 0x51, 0x55, 0x56, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA6, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
586 { 0x11, 0x15, 0x51, 0x55, 0x56, 0x65, 0x66, 0x6A, 0xA6, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
587 { 0x11, 0x15, 0x16, 0x51, 0x52, 0x55, 0x56, 0x65, 0x66, 0x67, 0x6A, 0xA6, 0xAA, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
588 { 0x14, 0x15, 0x54, 0x55, 0x59, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA9, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
589 { 0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
590 { 0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0xA6, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
591 { 0x15, 0x16, 0x55, 0x56, 0x5A, 0x65, 0x66, 0x6A, 0x6B, 0xA6, 0xAA, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
592 { 0x14, 0x15, 0x54, 0x55, 0x59, 0x65, 0x69, 0x6A, 0xA9, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
593 { 0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0xA9, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
594 { 0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
595 { 0x15, 0x16, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x6B, 0xAA, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
596 { 0x14, 0x15, 0x19, 0x54, 0x55, 0x58, 0x59, 0x65, 0x69, 0x6A, 0x6D, 0xA9, 0xAA, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
597 { 0x15, 0x19, 0x55, 0x59, 0x5A, 0x65, 0x69, 0x6A, 0x6E, 0xA9, 0xAA, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
598 { 0x15, 0x19, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x6E, 0xAA, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
599 { 0x15, 0x55, 0x56, 0x59, 0x5A, 0x66, 0x69, 0x6A, 0x6B, 0x6E, 0x9A, 0xAA, 0xAB, 0xAE, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00 },
600 { 0x10, 0x15, 0x25, 0x51, 0x54, 0x55, 0x61, 0x64, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA, 0x00, 0x00, 0x00 },
601 { 0x11, 0x15, 0x25, 0x51, 0x55, 0x56, 0x61, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA6, 0xAA, 0xBA, 0x00, 0x00, 0x00, 0x00, 0x00 },
602 { 0x11, 0x15, 0x25, 0x51, 0x55, 0x56, 0x61, 0x65, 0x66, 0x6A, 0x76, 0xA6, 0xAA, 0xBA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
603 { 0x11, 0x15, 0x26, 0x51, 0x55, 0x56, 0x62, 0x65, 0x66, 0x67, 0x6A, 0x76, 0xA6, 0xAA, 0xAB, 0xBA, 0xBB, 0x00, 0x00, 0x00 },
604 { 0x14, 0x15, 0x25, 0x54, 0x55, 0x59, 0x64, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA9, 0xAA, 0xBA, 0x00, 0x00, 0x00, 0x00, 0x00 },
605 { 0x15, 0x25, 0x55, 0x65, 0x66, 0x69, 0x6A, 0x7A, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
606 { 0x15, 0x25, 0x55, 0x56, 0x65, 0x66, 0x69, 0x6A, 0x7A, 0xA6, 0xAA, 0xBA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
607 { 0x15, 0x26, 0x55, 0x56, 0x65, 0x66, 0x6A, 0x6B, 0x7A, 0xA6, 0xAA, 0xAB, 0xBA, 0xBB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
608 { 0x14, 0x15, 0x25, 0x54, 0x55, 0x59, 0x64, 0x65, 0x69, 0x6A, 0x79, 0xA9, 0xAA, 0xBA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
609 { 0x15, 0x25, 0x55, 0x59, 0x65, 0x66, 0x69, 0x6A, 0x7A, 0xA9, 0xAA, 0xBA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
610 { 0x15, 0x25, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x7A, 0xAA, 0xBA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
611 { 0x15, 0x55, 0x56, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x6B, 0x7A, 0xA6, 0xAA, 0xAB, 0xBA, 0xBB, 0x00, 0x00, 0x00, 0x00, 0x00 },
612 { 0x14, 0x15, 0x29, 0x54, 0x55, 0x59, 0x65, 0x68, 0x69, 0x6A, 0x6D, 0x79, 0xA9, 0xAA, 0xAE, 0xBA, 0xBE, 0x00, 0x00, 0x00 },
613 { 0x15, 0x29, 0x55, 0x59, 0x65, 0x69, 0x6A, 0x6E, 0x7A, 0xA9, 0xAA, 0xAE, 0xBA, 0xBE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
614 { 0x15, 0x55, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x6E, 0x7A, 0xA9, 0xAA, 0xAE, 0xBA, 0xBE, 0x00, 0x00, 0x00, 0x00, 0x00 },
615 { 0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x6B, 0x6E, 0x7A, 0xAA, 0xAB, 0xAE, 0xBA, 0xBF, 0x00, 0x00, 0x00 },
616 { 0x45, 0x51, 0x54, 0x55, 0x56, 0x59, 0x65, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00 },
617 { 0x41, 0x45, 0x51, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xAA, 0x00, 0x00, 0x00, 0x00 },
618 { 0x41, 0x45, 0x51, 0x55, 0x56, 0x5A, 0x66, 0x95, 0x96, 0x9A, 0xA6, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
619 { 0x41, 0x45, 0x46, 0x51, 0x52, 0x55, 0x56, 0x5A, 0x66, 0x95, 0x96, 0x9A, 0xA6, 0xAA, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00 },
620 { 0x44, 0x45, 0x54, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x69, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA9, 0xAA, 0x00, 0x00, 0x00, 0x00 },
621 { 0x45, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA6, 0xA9, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
622 { 0x45, 0x55, 0x56, 0x59, 0x5A, 0x66, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA6, 0xAA, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
623 { 0x45, 0x46, 0x55, 0x56, 0x5A, 0x66, 0x6A, 0x96, 0x9A, 0x9B, 0xA6, 0xAA, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
624 { 0x44, 0x45, 0x54, 0x55, 0x59, 0x5A, 0x69, 0x95, 0x99, 0x9A, 0xA9, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
625 { 0x45, 0x55, 0x56, 0x59, 0x5A, 0x69, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA9, 0xAA, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
626 { 0x45, 0x55, 0x56, 0x59, 0x5A, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
627 { 0x45, 0x46, 0x55, 0x56, 0x59, 0x5A, 0x6A, 0x96, 0x9A, 0x9B, 0xAA, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
628 { 0x44, 0x45, 0x49, 0x54, 0x55, 0x58, 0x59, 0x5A, 0x69, 0x95, 0x99, 0x9A, 0xA9, 0xAA, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x00 },
629 { 0x45, 0x49, 0x55, 0x59, 0x5A, 0x69, 0x6A, 0x99, 0x9A, 0x9E, 0xA9, 0xAA, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
630 { 0x45, 0x49, 0x55, 0x56, 0x59, 0x5A, 0x6A, 0x99, 0x9A, 0x9E, 0xAA, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
631 { 0x45, 0x4A, 0x55, 0x56, 0x59, 0x5A, 0x6A, 0x9A, 0x9B, 0x9E, 0xAA, 0xAB, 0xAE, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
632 { 0x50, 0x51, 0x54, 0x55, 0x56, 0x59, 0x65, 0x66, 0x69, 0x95, 0x96, 0x99, 0xA5, 0xA6, 0xA9, 0xAA, 0x00, 0x00, 0x00, 0x00 },
633 { 0x51, 0x55, 0x56, 0x59, 0x65, 0x66, 0x6A, 0x95, 0x96, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
634 { 0x51, 0x55, 0x56, 0x5A, 0x65, 0x66, 0x6A, 0x95, 0x96, 0x9A, 0xA5, 0xA6, 0xAA, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
635 { 0x51, 0x52, 0x55, 0x56, 0x5A, 0x66, 0x6A, 0x96, 0x9A, 0xA6, 0xA7, 0xAA, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
636 { 0x54, 0x55, 0x56, 0x59, 0x65, 0x69, 0x6A, 0x95, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
637 { 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0x00, 0x00, 0x00, 0x00 },
638 { 0x15, 0x45, 0x51, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x6A, 0x95, 0x96, 0x9A, 0xA6, 0xAA, 0xAB, 0x00, 0x00, 0x00, 0x00 },
639 { 0x55, 0x56, 0x5A, 0x66, 0x6A, 0x96, 0x9A, 0xA6, 0xAA, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
640 { 0x54, 0x55, 0x59, 0x5A, 0x65, 0x69, 0x6A, 0x95, 0x99, 0x9A, 0xA5, 0xA9, 0xAA, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
641 { 0x15, 0x45, 0x54, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x69, 0x6A, 0x95, 0x99, 0x9A, 0xA9, 0xAA, 0xAE, 0x00, 0x00, 0x00, 0x00 },
642 { 0x15, 0x45, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA6, 0xA9, 0xAA, 0xAB, 0xAE, 0x00 },
643 { 0x55, 0x56, 0x59, 0x5A, 0x66, 0x6A, 0x96, 0x9A, 0xA6, 0xAA, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
644 { 0x54, 0x55, 0x58, 0x59, 0x5A, 0x69, 0x6A, 0x99, 0x9A, 0xA9, 0xAA, 0xAD, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
645 { 0x55, 0x59, 0x5A, 0x69, 0x6A, 0x99, 0x9A, 0xA9, 0xAA, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
646 { 0x55, 0x56, 0x59, 0x5A, 0x69, 0x6A, 0x99, 0x9A, 0xA9, 0xAA, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
647 { 0x55, 0x56, 0x59, 0x5A, 0x6A, 0x9A, 0xAA, 0xAB, 0xAE, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
648 { 0x50, 0x51, 0x54, 0x55, 0x65, 0x66, 0x69, 0x95, 0xA5, 0xA6, 0xA9, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
649 { 0x51, 0x55, 0x56, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x96, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
650 { 0x51, 0x55, 0x56, 0x65, 0x66, 0x6A, 0x95, 0x96, 0xA5, 0xA6, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
651 { 0x51, 0x52, 0x55, 0x56, 0x65, 0x66, 0x6A, 0x96, 0xA6, 0xA7, 0xAA, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
652 { 0x54, 0x55, 0x59, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x99, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
653 { 0x15, 0x51, 0x54, 0x55, 0x56, 0x59, 0x65, 0x66, 0x69, 0x6A, 0x95, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA, 0x00, 0x00, 0x00, 0x00 },
654 { 0x15, 0x51, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x96, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xAB, 0xBA, 0x00 },
655 { 0x55, 0x56, 0x5A, 0x65, 0x66, 0x6A, 0x96, 0x9A, 0xA6, 0xAA, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
656 { 0x54, 0x55, 0x59, 0x65, 0x69, 0x6A, 0x95, 0x99, 0xA5, 0xA9, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
657 { 0x15, 0x54, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xAE, 0xBA, 0x00 },
658 { 0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x9A, 0xA6, 0xA9, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
659 { 0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x96, 0x9A, 0xA6, 0xAA, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
660 { 0x54, 0x55, 0x58, 0x59, 0x65, 0x69, 0x6A, 0x99, 0xA9, 0xAA, 0xAD, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
661 { 0x55, 0x59, 0x5A, 0x65, 0x69, 0x6A, 0x99, 0x9A, 0xA9, 0xAA, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
662 { 0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x99, 0x9A, 0xA9, 0xAA, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
663 { 0x15, 0x55, 0x56, 0x59, 0x5A, 0x66, 0x69, 0x6A, 0x9A, 0xAA, 0xAB, 0xAE, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
664 { 0x50, 0x51, 0x54, 0x55, 0x61, 0x64, 0x65, 0x66, 0x69, 0x95, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA, 0x00, 0x00, 0x00, 0x00, 0x00 },
665 { 0x51, 0x55, 0x61, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA6, 0xA9, 0xAA, 0xB6, 0xBA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
666 { 0x51, 0x55, 0x56, 0x61, 0x65, 0x66, 0x6A, 0xA5, 0xA6, 0xAA, 0xB6, 0xBA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
667 { 0x51, 0x55, 0x56, 0x62, 0x65, 0x66, 0x6A, 0xA6, 0xA7, 0xAA, 0xAB, 0xB6, 0xBA, 0xBB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
668 { 0x54, 0x55, 0x64, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA6, 0xA9, 0xAA, 0xB9, 0xBA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
669 { 0x55, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
670 { 0x55, 0x56, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
671 { 0x55, 0x56, 0x65, 0x66, 0x6A, 0xA6, 0xAA, 0xAB, 0xBA, 0xBB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
672 { 0x54, 0x55, 0x59, 0x64, 0x65, 0x69, 0x6A, 0xA5, 0xA9, 0xAA, 0xB9, 0xBA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
673 { 0x55, 0x59, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
674 { 0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
675 { 0x15, 0x55, 0x56, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0xA6, 0xAA, 0xAB, 0xBA, 0xBB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
676 { 0x54, 0x55, 0x59, 0x65, 0x68, 0x69, 0x6A, 0xA9, 0xAA, 0xAD, 0xAE, 0xB9, 0xBA, 0xBE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
677 { 0x55, 0x59, 0x65, 0x69, 0x6A, 0xA9, 0xAA, 0xAE, 0xBA, 0xBE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
678 { 0x15, 0x55, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0xA9, 0xAA, 0xAE, 0xBA, 0xBE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
679 { 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0xAA, 0xAB, 0xAE, 0xBA, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
680 { 0x40, 0x41, 0x44, 0x45, 0x50, 0x51, 0x54, 0x55, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0x00, 0x00, 0x00, 0x00 },
681 { 0x41, 0x45, 0x51, 0x55, 0x56, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
682 { 0x41, 0x45, 0x51, 0x55, 0x56, 0x95, 0x96, 0x9A, 0xA6, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
683 { 0x41, 0x45, 0x46, 0x51, 0x52, 0x55, 0x56, 0x95, 0x96, 0x97, 0x9A, 0xA6, 0xAA, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
684 { 0x44, 0x45, 0x54, 0x55, 0x59, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA9, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
685 { 0x45, 0x55, 0x56, 0x59, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
686 { 0x45, 0x55, 0x56, 0x59, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0xA6, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
687 { 0x45, 0x46, 0x55, 0x56, 0x5A, 0x95, 0x96, 0x9A, 0x9B, 0xA6, 0xAA, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
688 { 0x44, 0x45, 0x54, 0x55, 0x59, 0x95, 0x99, 0x9A, 0xA9, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
689 { 0x45, 0x55, 0x56, 0x59, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0xA9, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
690 { 0x45, 0x55, 0x56, 0x59, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
691 { 0x45, 0x46, 0x55, 0x56, 0x59, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0x9B, 0xAA, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
692 { 0x44, 0x45, 0x49, 0x54, 0x55, 0x58, 0x59, 0x95, 0x99, 0x9A, 0x9D, 0xA9, 0xAA, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
693 { 0x45, 0x49, 0x55, 0x59, 0x5A, 0x95, 0x99, 0x9A, 0x9E, 0xA9, 0xAA, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
694 { 0x45, 0x49, 0x55, 0x56, 0x59, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0x9E, 0xAA, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
695 { 0x45, 0x55, 0x56, 0x59, 0x5A, 0x6A, 0x96, 0x99, 0x9A, 0x9B, 0x9E, 0xAA, 0xAB, 0xAE, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00 },
696 { 0x50, 0x51, 0x54, 0x55, 0x65, 0x95, 0x96, 0x99, 0xA5, 0xA6, 0xA9, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
697 { 0x51, 0x55, 0x56, 0x65, 0x66, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
698 { 0x51, 0x55, 0x56, 0x65, 0x66, 0x95, 0x96, 0x9A, 0xA5, 0xA6, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
699 { 0x51, 0x52, 0x55, 0x56, 0x66, 0x95, 0x96, 0x9A, 0xA6, 0xA7, 0xAA, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
700 { 0x54, 0x55, 0x59, 0x65, 0x69, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
701 { 0x45, 0x51, 0x54, 0x55, 0x56, 0x59, 0x65, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA, 0x00, 0x00, 0x00, 0x00 },
702 { 0x45, 0x51, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xAB, 0xEA, 0x00 },
703 { 0x55, 0x56, 0x5A, 0x66, 0x6A, 0x95, 0x96, 0x9A, 0xA6, 0xAA, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
704 { 0x54, 0x55, 0x59, 0x65, 0x69, 0x95, 0x99, 0x9A, 0xA5, 0xA9, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
705 { 0x45, 0x54, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x69, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xAE, 0xEA, 0x00 },
706 { 0x45, 0x55, 0x56, 0x59, 0x5A, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA6, 0xA9, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
707 { 0x45, 0x55, 0x56, 0x59, 0x5A, 0x66, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA6, 0xAA, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
708 { 0x54, 0x55, 0x58, 0x59, 0x69, 0x95, 0x99, 0x9A, 0xA9, 0xAA, 0xAD, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
709 { 0x55, 0x59, 0x5A, 0x69, 0x6A, 0x95, 0x99, 0x9A, 0xA9, 0xAA, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
710 { 0x45, 0x55, 0x56, 0x59, 0x5A, 0x69, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA9, 0xAA, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
711 { 0x45, 0x55, 0x56, 0x59, 0x5A, 0x6A, 0x96, 0x99, 0x9A, 0xAA, 0xAB, 0xAE, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
712 { 0x50, 0x51, 0x54, 0x55, 0x65, 0x95, 0xA5, 0xA6, 0xA9, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
713 { 0x51, 0x55, 0x56, 0x65, 0x66, 0x95, 0x96, 0xA5, 0xA6, 0xA9, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
714 { 0x51, 0x55, 0x56, 0x65, 0x66, 0x95, 0x96, 0xA5, 0xA6, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
715 { 0x51, 0x52, 0x55, 0x56, 0x65, 0x66, 0x95, 0x96, 0xA5, 0xA6, 0xA7, 0xAA, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
716 { 0x54, 0x55, 0x59, 0x65, 0x69, 0x95, 0x99, 0xA5, 0xA6, 0xA9, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
717 { 0x51, 0x54, 0x55, 0x56, 0x59, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA, 0xEA, 0x00 },
718 { 0x51, 0x55, 0x56, 0x65, 0x66, 0x6A, 0x95, 0x96, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
719 { 0x51, 0x55, 0x56, 0x5A, 0x65, 0x66, 0x6A, 0x95, 0x96, 0x9A, 0xA5, 0xA6, 0xAA, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
720 { 0x54, 0x55, 0x59, 0x65, 0x69, 0x95, 0x99, 0xA5, 0xA9, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
721 { 0x54, 0x55, 0x59, 0x65, 0x69, 0x6A, 0x95, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
722 { 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0x00, 0x00, 0x00, 0x00 },
723 { 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x6A, 0x95, 0x96, 0x9A, 0xA6, 0xA9, 0xAA, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
724 { 0x54, 0x55, 0x58, 0x59, 0x65, 0x69, 0x95, 0x99, 0xA5, 0xA9, 0xAA, 0xAD, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
725 { 0x54, 0x55, 0x59, 0x5A, 0x65, 0x69, 0x6A, 0x95, 0x99, 0x9A, 0xA5, 0xA9, 0xAA, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
726 { 0x55, 0x56, 0x59, 0x5A, 0x65, 0x69, 0x6A, 0x95, 0x99, 0x9A, 0xA6, 0xA9, 0xAA, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
727 { 0x55, 0x56, 0x59, 0x5A, 0x66, 0x69, 0x6A, 0x96, 0x99, 0x9A, 0xA6, 0xA9, 0xAA, 0xAB, 0xAE, 0xAF, 0x00, 0x00, 0x00, 0x00 },
728 { 0x50, 0x51, 0x54, 0x55, 0x61, 0x64, 0x65, 0x95, 0xA5, 0xA6, 0xA9, 0xAA, 0xB5, 0xBA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
729 { 0x51, 0x55, 0x61, 0x65, 0x66, 0x95, 0xA5, 0xA6, 0xA9, 0xAA, 0xB6, 0xBA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
730 { 0x51, 0x55, 0x56, 0x61, 0x65, 0x66, 0x95, 0x96, 0xA5, 0xA6, 0xAA, 0xB6, 0xBA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
731 { 0x51, 0x55, 0x56, 0x65, 0x66, 0x6A, 0x96, 0xA5, 0xA6, 0xA7, 0xAA, 0xAB, 0xB6, 0xBA, 0xBB, 0x00, 0x00, 0x00, 0x00, 0x00 },
732 { 0x54, 0x55, 0x64, 0x65, 0x69, 0x95, 0xA5, 0xA6, 0xA9, 0xAA, 0xB9, 0xBA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
733 { 0x55, 0x65, 0x66, 0x69, 0x6A, 0x95, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
734 { 0x51, 0x55, 0x56, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x96, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
735 { 0x51, 0x55, 0x56, 0x65, 0x66, 0x6A, 0x96, 0xA5, 0xA6, 0xAA, 0xAB, 0xBA, 0xBB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
736 { 0x54, 0x55, 0x59, 0x64, 0x65, 0x69, 0x95, 0x99, 0xA5, 0xA9, 0xAA, 0xB9, 0xBA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
737 { 0x54, 0x55, 0x59, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x99, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
738 { 0x55, 0x56, 0x59, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
739 { 0x55, 0x56, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x96, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xAB, 0xBA, 0xBB, 0x00, 0x00, 0x00, 0x00 },
740 { 0x54, 0x55, 0x59, 0x65, 0x69, 0x6A, 0x99, 0xA5, 0xA9, 0xAA, 0xAD, 0xAE, 0xB9, 0xBA, 0xBE, 0x00, 0x00, 0x00, 0x00, 0x00 },
741 { 0x54, 0x55, 0x59, 0x65, 0x69, 0x6A, 0x99, 0xA5, 0xA9, 0xAA, 0xAE, 0xBA, 0xBE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
742 { 0x55, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xAE, 0xBA, 0xBE, 0x00, 0x00, 0x00, 0x00 },
743 { 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x9A, 0xA6, 0xA9, 0xAA, 0xAB, 0xAE, 0xBA, 0x00, 0x00, 0x00, 0x00, 0x00 },
744 { 0x40, 0x45, 0x51, 0x54, 0x55, 0x85, 0x91, 0x94, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA, 0x00, 0x00, 0x00 },
745 { 0x41, 0x45, 0x51, 0x55, 0x56, 0x85, 0x91, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xAA, 0xEA, 0x00, 0x00, 0x00, 0x00, 0x00 },
746 { 0x41, 0x45, 0x51, 0x55, 0x56, 0x85, 0x91, 0x95, 0x96, 0x9A, 0xA6, 0xAA, 0xD6, 0xEA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
747 { 0x41, 0x45, 0x51, 0x55, 0x56, 0x86, 0x92, 0x95, 0x96, 0x97, 0x9A, 0xA6, 0xAA, 0xAB, 0xD6, 0xEA, 0xEB, 0x00, 0x00, 0x00 },
748 { 0x44, 0x45, 0x54, 0x55, 0x59, 0x85, 0x94, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA9, 0xAA, 0xEA, 0x00, 0x00, 0x00, 0x00, 0x00 },
749 { 0x45, 0x55, 0x85, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xDA, 0xEA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
750 { 0x45, 0x55, 0x56, 0x85, 0x95, 0x96, 0x99, 0x9A, 0xA6, 0xAA, 0xDA, 0xEA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
751 { 0x45, 0x55, 0x56, 0x86, 0x95, 0x96, 0x9A, 0x9B, 0xA6, 0xAA, 0xAB, 0xDA, 0xEA, 0xEB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
752 { 0x44, 0x45, 0x54, 0x55, 0x59, 0x85, 0x94, 0x95, 0x99, 0x9A, 0xA9, 0xAA, 0xD9, 0xEA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
753 { 0x45, 0x55, 0x59, 0x85, 0x95, 0x96, 0x99, 0x9A, 0xA9, 0xAA, 0xDA, 0xEA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
754 { 0x45, 0x55, 0x56, 0x59, 0x5A, 0x85, 0x95, 0x96, 0x99, 0x9A, 0xAA, 0xDA, 0xEA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
755 { 0x45, 0x55, 0x56, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0x9B, 0xA6, 0xAA, 0xAB, 0xDA, 0xEA, 0xEB, 0x00, 0x00, 0x00, 0x00, 0x00 },
756 { 0x44, 0x45, 0x54, 0x55, 0x59, 0x89, 0x95, 0x98, 0x99, 0x9A, 0x9D, 0xA9, 0xAA, 0xAE, 0xD9, 0xEA, 0xEE, 0x00, 0x00, 0x00 },
757 { 0x45, 0x55, 0x59, 0x89, 0x95, 0x99, 0x9A, 0x9E, 0xA9, 0xAA, 0xAE, 0xDA, 0xEA, 0xEE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
758 { 0x45, 0x55, 0x59, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0x9E, 0xA9, 0xAA, 0xAE, 0xDA, 0xEA, 0xEE, 0x00, 0x00, 0x00, 0x00, 0x00 },
759 { 0x45, 0x55, 0x56, 0x59, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0x9B, 0x9E, 0xAA, 0xAB, 0xAE, 0xDA, 0xEA, 0xEF, 0x00, 0x00, 0x00 },
760 { 0x50, 0x51, 0x54, 0x55, 0x65, 0x91, 0x94, 0x95, 0x96, 0x99, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA, 0x00, 0x00, 0x00, 0x00, 0x00 },
761 { 0x51, 0x55, 0x91, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xE6, 0xEA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
762 { 0x51, 0x55, 0x56, 0x91, 0x95, 0x96, 0x9A, 0xA5, 0xA6, 0xAA, 0xE6, 0xEA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
763 { 0x51, 0x55, 0x56, 0x92, 0x95, 0x96, 0x9A, 0xA6, 0xA7, 0xAA, 0xAB, 0xE6, 0xEA, 0xEB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
764 { 0x54, 0x55, 0x94, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xE9, 0xEA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
765 { 0x55, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
766 { 0x55, 0x56, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
767 { 0x55, 0x56, 0x95, 0x96, 0x9A, 0xA6, 0xAA, 0xAB, 0xEA, 0xEB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
768 { 0x54, 0x55, 0x59, 0x94, 0x95, 0x99, 0x9A, 0xA5, 0xA9, 0xAA, 0xE9, 0xEA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
769 { 0x55, 0x59, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
770 { 0x45, 0x55, 0x56, 0x59, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
771 { 0x45, 0x55, 0x56, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0xA6, 0xAA, 0xAB, 0xEA, 0xEB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
772 { 0x54, 0x55, 0x59, 0x95, 0x98, 0x99, 0x9A, 0xA9, 0xAA, 0xAD, 0xAE, 0xE9, 0xEA, 0xEE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
773 { 0x55, 0x59, 0x95, 0x99, 0x9A, 0xA9, 0xAA, 0xAE, 0xEA, 0xEE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
774 { 0x45, 0x55, 0x59, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0xA9, 0xAA, 0xAE, 0xEA, 0xEE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
775 { 0x55, 0x56, 0x59, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0xAA, 0xAB, 0xAE, 0xEA, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
776 { 0x50, 0x51, 0x54, 0x55, 0x65, 0x91, 0x94, 0x95, 0xA5, 0xA6, 0xA9, 0xAA, 0xE5, 0xEA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
777 { 0x51, 0x55, 0x65, 0x91, 0x95, 0x96, 0xA5, 0xA6, 0xA9, 0xAA, 0xE6, 0xEA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
778 { 0x51, 0x55, 0x56, 0x65, 0x66, 0x91, 0x95, 0x96, 0xA5, 0xA6, 0xAA, 0xE6, 0xEA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
779 { 0x51, 0x55, 0x56, 0x66, 0x95, 0x96, 0x9A, 0xA5, 0xA6, 0xA7, 0xAA, 0xAB, 0xE6, 0xEA, 0xEB, 0x00, 0x00, 0x00, 0x00, 0x00 },
780 { 0x54, 0x55, 0x65, 0x94, 0x95, 0x99, 0xA5, 0xA6, 0xA9, 0xAA, 0xE9, 0xEA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
781 { 0x55, 0x65, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
782 { 0x51, 0x55, 0x56, 0x65, 0x66, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
783 { 0x51, 0x55, 0x56, 0x66, 0x95, 0x96, 0x9A, 0xA5, 0xA6, 0xAA, 0xAB, 0xEA, 0xEB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
784 { 0x54, 0x55, 0x59, 0x65, 0x69, 0x94, 0x95, 0x99, 0xA5, 0xA9, 0xAA, 0xE9, 0xEA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
785 { 0x54, 0x55, 0x59, 0x65, 0x69, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
786 { 0x55, 0x56, 0x59, 0x65, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
787 { 0x55, 0x56, 0x5A, 0x66, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xAB, 0xEA, 0xEB, 0x00, 0x00, 0x00, 0x00 },
788 { 0x54, 0x55, 0x59, 0x69, 0x95, 0x99, 0x9A, 0xA5, 0xA9, 0xAA, 0xAD, 0xAE, 0xE9, 0xEA, 0xEE, 0x00, 0x00, 0x00, 0x00, 0x00 },
789 { 0x54, 0x55, 0x59, 0x69, 0x95, 0x99, 0x9A, 0xA5, 0xA9, 0xAA, 0xAE, 0xEA, 0xEE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
790 { 0x55, 0x59, 0x5A, 0x69, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xAE, 0xEA, 0xEE, 0x00, 0x00, 0x00, 0x00 },
791 { 0x55, 0x56, 0x59, 0x5A, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA6, 0xA9, 0xAA, 0xAB, 0xAE, 0xEA, 0x00, 0x00, 0x00, 0x00, 0x00 },
792 { 0x50, 0x51, 0x54, 0x55, 0x65, 0x95, 0xA1, 0xA4, 0xA5, 0xA6, 0xA9, 0xAA, 0xB5, 0xBA, 0xE5, 0xEA, 0xFA, 0x00, 0x00, 0x00 },
793 { 0x51, 0x55, 0x65, 0x95, 0xA1, 0xA5, 0xA6, 0xA9, 0xAA, 0xB6, 0xBA, 0xE6, 0xEA, 0xFA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
794 { 0x51, 0x55, 0x65, 0x66, 0x95, 0x96, 0xA5, 0xA6, 0xA9, 0xAA, 0xB6, 0xBA, 0xE6, 0xEA, 0xFA, 0x00, 0x00, 0x00, 0x00, 0x00 },
795 { 0x51, 0x55, 0x56, 0x65, 0x66, 0x95, 0x96, 0xA5, 0xA6, 0xA7, 0xAA, 0xAB, 0xB6, 0xBA, 0xE6, 0xEA, 0xFB, 0x00, 0x00, 0x00 },
796 { 0x54, 0x55, 0x65, 0x95, 0xA4, 0xA5, 0xA6, 0xA9, 0xAA, 0xB9, 0xBA, 0xE9, 0xEA, 0xFA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
797 { 0x55, 0x65, 0x95, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA, 0xEA, 0xFA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
798 { 0x51, 0x55, 0x65, 0x66, 0x95, 0x96, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA, 0xEA, 0xFA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
799 { 0x55, 0x56, 0x65, 0x66, 0x95, 0x96, 0xA5, 0xA6, 0xAA, 0xAB, 0xBA, 0xEA, 0xFB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
800 { 0x54, 0x55, 0x65, 0x69, 0x95, 0x99, 0xA5, 0xA6, 0xA9, 0xAA, 0xB9, 0xBA, 0xE9, 0xEA, 0xFA, 0x00, 0x00, 0x00, 0x00, 0x00 },
801 { 0x54, 0x55, 0x65, 0x69, 0x95, 0x99, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA, 0xEA, 0xFA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
802 { 0x55, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA, 0xEA, 0xFA, 0x00, 0x00, 0x00, 0x00 },
803 { 0x55, 0x56, 0x65, 0x66, 0x6A, 0x95, 0x96, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xAB, 0xBA, 0xEA, 0x00, 0x00, 0x00, 0x00, 0x00 },
804 { 0x54, 0x55, 0x59, 0x65, 0x69, 0x95, 0x99, 0xA5, 0xA9, 0xAA, 0xAD, 0xAE, 0xB9, 0xBA, 0xE9, 0xEA, 0xFE, 0x00, 0x00, 0x00 },
805 { 0x55, 0x59, 0x65, 0x69, 0x95, 0x99, 0xA5, 0xA9, 0xAA, 0xAE, 0xBA, 0xEA, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
806 { 0x55, 0x59, 0x65, 0x69, 0x6A, 0x95, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xAE, 0xBA, 0xEA, 0x00, 0x00, 0x00, 0x00, 0x00 },
807 { 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xAB, 0xAE, 0xBA, 0xEA },
808 // clang-format on
809 };
810
811 LatticePoint4D latticePoints[256];
812 for (int i = 0; i < 256; i++) {
813 int cx = ((i >> 0) & 3) - 1;
814 int cy = ((i >> 2) & 3) - 1;
815 int cz = ((i >> 4) & 3) - 1;
816 int cw = ((i >> 6) & 3) - 1;
817 latticePoints[i] = { cx, cy, cz, cw };
818 }
819 for (unsigned int i = 0; i < 256; i++) {
820 LOOKUP_4D_SIZE[i] = lookup4DPregenSize[i];
821 for (unsigned char j = 0; j < lookup4DPregenSize[i]; j++) {
822 LOOKUP_4D[i][j] = latticePoints[lookup4DPregen[i][j]];
823 }
824 }
825}
826
827void OpenSimplex2S::initGradients()
828{
829 static const int grad2_size = 24;
830 Grad2 grad2[grad2_size] {
831 { 0.130526192220052, 0.99144486137381 }, { 0.38268343236509, 0.923879532511287 },
832 { 0.608761429008721, 0.793353340291235 }, { 0.793353340291235, 0.608761429008721 },
833 { 0.923879532511287, 0.38268343236509 }, { 0.99144486137381, 0.130526192220051 },
834 { 0.99144486137381, -0.130526192220051 }, { 0.923879532511287, -0.38268343236509 },
835 { 0.793353340291235, -0.60876142900872 }, { 0.608761429008721, -0.793353340291235 },
836 { 0.38268343236509, -0.923879532511287 }, { 0.130526192220052, -0.99144486137381 },
837 { -0.130526192220052, -0.99144486137381 }, { -0.38268343236509, -0.923879532511287 },
838 { -0.608761429008721, -0.793353340291235 }, { -0.793353340291235, -0.608761429008721 },
839 { -0.923879532511287, -0.38268343236509 }, { -0.99144486137381, -0.130526192220052 },
840 { -0.99144486137381, 0.130526192220051 }, { -0.923879532511287, 0.38268343236509 },
841 { -0.793353340291235, 0.608761429008721 }, { -0.608761429008721, 0.793353340291235 },
842 { -0.38268343236509, 0.923879532511287 }, { -0.130526192220052, 0.99144486137381 },
843 };
844 for (int i = 0; i < grad2_size; i++) {
845 grad2[i].dx /= N2;
846 grad2[i].dy /= N2;
847 }
848 for (int i = 0; i < PSIZE; i++) {
849 GRADIENTS_2D[i] = grad2[i % grad2_size];
850 }
851
852 static const int grad3_size = 48;
853 Grad3 grad3[grad3_size] {
854 { -2.22474487139, -2.22474487139, -1.0 },
855 { -2.22474487139, -2.22474487139, 1.0 },
856 { -3.0862664687972017, -1.1721513422464978, 0.0 },
857 { -1.1721513422464978, -3.0862664687972017, 0.0 },
858 { -2.22474487139, -1.0, -2.22474487139 },
859 { -2.22474487139, 1.0, -2.22474487139 },
860 { -1.1721513422464978, 0.0, -3.0862664687972017 },
861 { -3.0862664687972017, 0.0, -1.1721513422464978 },
862 { -2.22474487139, -1.0, 2.22474487139 },
863 { -2.22474487139, 1.0, 2.22474487139 },
864 { -3.0862664687972017, 0.0, 1.1721513422464978 },
865 { -1.1721513422464978, 0.0, 3.0862664687972017 },
866 { -2.22474487139, 2.22474487139, -1.0 },
867 { -2.22474487139, 2.22474487139, 1.0 },
868 { -1.1721513422464978, 3.0862664687972017, 0.0 },
869 { -3.0862664687972017, 1.1721513422464978, 0.0 },
870 { -1.0, -2.22474487139, -2.22474487139 },
871 { 1.0, -2.22474487139, -2.22474487139 },
872 { 0.0, -3.0862664687972017, -1.1721513422464978 },
873 { 0.0, -1.1721513422464978, -3.0862664687972017 },
874 { -1.0, -2.22474487139, 2.22474487139 },
875 { 1.0, -2.22474487139, 2.22474487139 },
876 { 0.0, -1.1721513422464978, 3.0862664687972017 },
877 { 0.0, -3.0862664687972017, 1.1721513422464978 },
878 { -1.0, 2.22474487139, -2.22474487139 },
879 { 1.0, 2.22474487139, -2.22474487139 },
880 { 0.0, 1.1721513422464978, -3.0862664687972017 },
881 { 0.0, 3.0862664687972017, -1.1721513422464978 },
882 { -1.0, 2.22474487139, 2.22474487139 },
883 { 1.0, 2.22474487139, 2.22474487139 },
884 { 0.0, 3.0862664687972017, 1.1721513422464978 },
885 { 0.0, 1.1721513422464978, 3.0862664687972017 },
886 { 2.22474487139, -2.22474487139, -1.0 },
887 { 2.22474487139, -2.22474487139, 1.0 },
888 { 1.1721513422464978, -3.0862664687972017, 0.0 },
889 { 3.0862664687972017, -1.1721513422464978, 0.0 },
890 { 2.22474487139, -1.0, -2.22474487139 },
891 { 2.22474487139, 1.0, -2.22474487139 },
892 { 3.0862664687972017, 0.0, -1.1721513422464978 },
893 { 1.1721513422464978, 0.0, -3.0862664687972017 },
894 { 2.22474487139, -1.0, 2.22474487139 },
895 { 2.22474487139, 1.0, 2.22474487139 },
896 { 1.1721513422464978, 0.0, 3.0862664687972017 },
897 { 3.0862664687972017, 0.0, 1.1721513422464978 },
898 { 2.22474487139, 2.22474487139, -1.0 },
899 { 2.22474487139, 2.22474487139, 1.0 },
900 { 3.0862664687972017, 1.1721513422464978, 0.0 },
901 { 1.1721513422464978, 3.0862664687972017, 0.0 },
902 };
903 for (int i = 0; i < grad3_size; i++) {
904 grad3[i].dx /= N3;
905 grad3[i].dy /= N3;
906 grad3[i].dz /= N3;
907 }
908 for (int i = 0; i < PSIZE; i++) {
909 GRADIENTS_3D[i] = grad3[i % grad3_size];
910 }
911
912 static const int grad4_size = 160;
913 Grad4 grad4[grad4_size] {
914 { -0.753341017856078, -0.37968289875261624, -0.37968289875261624, -0.37968289875261624 },
915 { -0.7821684431180708, -0.4321472685365301, -0.4321472685365301, 0.12128480194602098 },
916 { -0.7821684431180708, -0.4321472685365301, 0.12128480194602098, -0.4321472685365301 },
917 { -0.7821684431180708, 0.12128480194602098, -0.4321472685365301, -0.4321472685365301 },
918 { -0.8586508742123365, -0.508629699630796, 0.044802370851755174, 0.044802370851755174 },
919 { -0.8586508742123365, 0.044802370851755174, -0.508629699630796, 0.044802370851755174 },
920 { -0.8586508742123365, 0.044802370851755174, 0.044802370851755174, -0.508629699630796 },
921 { -0.9982828964265062, -0.03381941603233842, -0.03381941603233842, -0.03381941603233842 },
922 { -0.37968289875261624, -0.753341017856078, -0.37968289875261624, -0.37968289875261624 },
923 { -0.4321472685365301, -0.7821684431180708, -0.4321472685365301, 0.12128480194602098 },
924 { -0.4321472685365301, -0.7821684431180708, 0.12128480194602098, -0.4321472685365301 },
925 { 0.12128480194602098, -0.7821684431180708, -0.4321472685365301, -0.4321472685365301 },
926 { -0.508629699630796, -0.8586508742123365, 0.044802370851755174, 0.044802370851755174 },
927 { 0.044802370851755174, -0.8586508742123365, -0.508629699630796, 0.044802370851755174 },
928 { 0.044802370851755174, -0.8586508742123365, 0.044802370851755174, -0.508629699630796 },
929 { -0.03381941603233842, -0.9982828964265062, -0.03381941603233842, -0.03381941603233842 },
930 { -0.37968289875261624, -0.37968289875261624, -0.753341017856078, -0.37968289875261624 },
931 { -0.4321472685365301, -0.4321472685365301, -0.7821684431180708, 0.12128480194602098 },
932 { -0.4321472685365301, 0.12128480194602098, -0.7821684431180708, -0.4321472685365301 },
933 { 0.12128480194602098, -0.4321472685365301, -0.7821684431180708, -0.4321472685365301 },
934 { -0.508629699630796, 0.044802370851755174, -0.8586508742123365, 0.044802370851755174 },
935 { 0.044802370851755174, -0.508629699630796, -0.8586508742123365, 0.044802370851755174 },
936 { 0.044802370851755174, 0.044802370851755174, -0.8586508742123365, -0.508629699630796 },
937 { -0.03381941603233842, -0.03381941603233842, -0.9982828964265062, -0.03381941603233842 },
938 { -0.37968289875261624, -0.37968289875261624, -0.37968289875261624, -0.753341017856078 },
939 { -0.4321472685365301, -0.4321472685365301, 0.12128480194602098, -0.7821684431180708 },
940 { -0.4321472685365301, 0.12128480194602098, -0.4321472685365301, -0.7821684431180708 },
941 { 0.12128480194602098, -0.4321472685365301, -0.4321472685365301, -0.7821684431180708 },
942 { -0.508629699630796, 0.044802370851755174, 0.044802370851755174, -0.8586508742123365 },
943 { 0.044802370851755174, -0.508629699630796, 0.044802370851755174, -0.8586508742123365 },
944 { 0.044802370851755174, 0.044802370851755174, -0.508629699630796, -0.8586508742123365 },
945 { -0.03381941603233842, -0.03381941603233842, -0.03381941603233842, -0.9982828964265062 },
946 { -0.6740059517812944, -0.3239847771997537, -0.3239847771997537, 0.5794684678643381 },
947 { -0.7504883828755602, -0.4004672082940195, 0.15296486218853164, 0.5029860367700724 },
948 { -0.7504883828755602, 0.15296486218853164, -0.4004672082940195, 0.5029860367700724 },
949 { -0.8828161875373585, 0.08164729285680945, 0.08164729285680945, 0.4553054119602712 },
950 { -0.4553054119602712, -0.08164729285680945, -0.08164729285680945, 0.8828161875373585 },
951 { -0.5029860367700724, -0.15296486218853164, 0.4004672082940195, 0.7504883828755602 },
952 { -0.5029860367700724, 0.4004672082940195, -0.15296486218853164, 0.7504883828755602 },
953 { -0.5794684678643381, 0.3239847771997537, 0.3239847771997537, 0.6740059517812944 },
954 { -0.3239847771997537, -0.6740059517812944, -0.3239847771997537, 0.5794684678643381 },
955 { -0.4004672082940195, -0.7504883828755602, 0.15296486218853164, 0.5029860367700724 },
956 { 0.15296486218853164, -0.7504883828755602, -0.4004672082940195, 0.5029860367700724 },
957 { 0.08164729285680945, -0.8828161875373585, 0.08164729285680945, 0.4553054119602712 },
958 { -0.08164729285680945, -0.4553054119602712, -0.08164729285680945, 0.8828161875373585 },
959 { -0.15296486218853164, -0.5029860367700724, 0.4004672082940195, 0.7504883828755602 },
960 { 0.4004672082940195, -0.5029860367700724, -0.15296486218853164, 0.7504883828755602 },
961 { 0.3239847771997537, -0.5794684678643381, 0.3239847771997537, 0.6740059517812944 },
962 { -0.3239847771997537, -0.3239847771997537, -0.6740059517812944, 0.5794684678643381 },
963 { -0.4004672082940195, 0.15296486218853164, -0.7504883828755602, 0.5029860367700724 },
964 { 0.15296486218853164, -0.4004672082940195, -0.7504883828755602, 0.5029860367700724 },
965 { 0.08164729285680945, 0.08164729285680945, -0.8828161875373585, 0.4553054119602712 },
966 { -0.08164729285680945, -0.08164729285680945, -0.4553054119602712, 0.8828161875373585 },
967 { -0.15296486218853164, 0.4004672082940195, -0.5029860367700724, 0.7504883828755602 },
968 { 0.4004672082940195, -0.15296486218853164, -0.5029860367700724, 0.7504883828755602 },
969 { 0.3239847771997537, 0.3239847771997537, -0.5794684678643381, 0.6740059517812944 },
970 { -0.6740059517812944, -0.3239847771997537, 0.5794684678643381, -0.3239847771997537 },
971 { -0.7504883828755602, -0.4004672082940195, 0.5029860367700724, 0.15296486218853164 },
972 { -0.7504883828755602, 0.15296486218853164, 0.5029860367700724, -0.4004672082940195 },
973 { -0.8828161875373585, 0.08164729285680945, 0.4553054119602712, 0.08164729285680945 },
974 { -0.4553054119602712, -0.08164729285680945, 0.8828161875373585, -0.08164729285680945 },
975 { -0.5029860367700724, -0.15296486218853164, 0.7504883828755602, 0.4004672082940195 },
976 { -0.5029860367700724, 0.4004672082940195, 0.7504883828755602, -0.15296486218853164 },
977 { -0.5794684678643381, 0.3239847771997537, 0.6740059517812944, 0.3239847771997537 },
978 { -0.3239847771997537, -0.6740059517812944, 0.5794684678643381, -0.3239847771997537 },
979 { -0.4004672082940195, -0.7504883828755602, 0.5029860367700724, 0.15296486218853164 },
980 { 0.15296486218853164, -0.7504883828755602, 0.5029860367700724, -0.4004672082940195 },
981 { 0.08164729285680945, -0.8828161875373585, 0.4553054119602712, 0.08164729285680945 },
982 { -0.08164729285680945, -0.4553054119602712, 0.8828161875373585, -0.08164729285680945 },
983 { -0.15296486218853164, -0.5029860367700724, 0.7504883828755602, 0.4004672082940195 },
984 { 0.4004672082940195, -0.5029860367700724, 0.7504883828755602, -0.15296486218853164 },
985 { 0.3239847771997537, -0.5794684678643381, 0.6740059517812944, 0.3239847771997537 },
986 { -0.3239847771997537, -0.3239847771997537, 0.5794684678643381, -0.6740059517812944 },
987 { -0.4004672082940195, 0.15296486218853164, 0.5029860367700724, -0.7504883828755602 },
988 { 0.15296486218853164, -0.4004672082940195, 0.5029860367700724, -0.7504883828755602 },
989 { 0.08164729285680945, 0.08164729285680945, 0.4553054119602712, -0.8828161875373585 },
990 { -0.08164729285680945, -0.08164729285680945, 0.8828161875373585, -0.4553054119602712 },
991 { -0.15296486218853164, 0.4004672082940195, 0.7504883828755602, -0.5029860367700724 },
992 { 0.4004672082940195, -0.15296486218853164, 0.7504883828755602, -0.5029860367700724 },
993 { 0.3239847771997537, 0.3239847771997537, 0.6740059517812944, -0.5794684678643381 },
994 { -0.6740059517812944, 0.5794684678643381, -0.3239847771997537, -0.3239847771997537 },
995 { -0.7504883828755602, 0.5029860367700724, -0.4004672082940195, 0.15296486218853164 },
996 { -0.7504883828755602, 0.5029860367700724, 0.15296486218853164, -0.4004672082940195 },
997 { -0.8828161875373585, 0.4553054119602712, 0.08164729285680945, 0.08164729285680945 },
998 { -0.4553054119602712, 0.8828161875373585, -0.08164729285680945, -0.08164729285680945 },
999 { -0.5029860367700724, 0.7504883828755602, -0.15296486218853164, 0.4004672082940195 },
1000 { -0.5029860367700724, 0.7504883828755602, 0.4004672082940195, -0.15296486218853164 },
1001 { -0.5794684678643381, 0.6740059517812944, 0.3239847771997537, 0.3239847771997537 },
1002 { -0.3239847771997537, 0.5794684678643381, -0.6740059517812944, -0.3239847771997537 },
1003 { -0.4004672082940195, 0.5029860367700724, -0.7504883828755602, 0.15296486218853164 },
1004 { 0.15296486218853164, 0.5029860367700724, -0.7504883828755602, -0.4004672082940195 },
1005 { 0.08164729285680945, 0.4553054119602712, -0.8828161875373585, 0.08164729285680945 },
1006 { -0.08164729285680945, 0.8828161875373585, -0.4553054119602712, -0.08164729285680945 },
1007 { -0.15296486218853164, 0.7504883828755602, -0.5029860367700724, 0.4004672082940195 },
1008 { 0.4004672082940195, 0.7504883828755602, -0.5029860367700724, -0.15296486218853164 },
1009 { 0.3239847771997537, 0.6740059517812944, -0.5794684678643381, 0.3239847771997537 },
1010 { -0.3239847771997537, 0.5794684678643381, -0.3239847771997537, -0.6740059517812944 },
1011 { -0.4004672082940195, 0.5029860367700724, 0.15296486218853164, -0.7504883828755602 },
1012 { 0.15296486218853164, 0.5029860367700724, -0.4004672082940195, -0.7504883828755602 },
1013 { 0.08164729285680945, 0.4553054119602712, 0.08164729285680945, -0.8828161875373585 },
1014 { -0.08164729285680945, 0.8828161875373585, -0.08164729285680945, -0.4553054119602712 },
1015 { -0.15296486218853164, 0.7504883828755602, 0.4004672082940195, -0.5029860367700724 },
1016 { 0.4004672082940195, 0.7504883828755602, -0.15296486218853164, -0.5029860367700724 },
1017 { 0.3239847771997537, 0.6740059517812944, 0.3239847771997537, -0.5794684678643381 },
1018 { 0.5794684678643381, -0.6740059517812944, -0.3239847771997537, -0.3239847771997537 },
1019 { 0.5029860367700724, -0.7504883828755602, -0.4004672082940195, 0.15296486218853164 },
1020 { 0.5029860367700724, -0.7504883828755602, 0.15296486218853164, -0.4004672082940195 },
1021 { 0.4553054119602712, -0.8828161875373585, 0.08164729285680945, 0.08164729285680945 },
1022 { 0.8828161875373585, -0.4553054119602712, -0.08164729285680945, -0.08164729285680945 },
1023 { 0.7504883828755602, -0.5029860367700724, -0.15296486218853164, 0.4004672082940195 },
1024 { 0.7504883828755602, -0.5029860367700724, 0.4004672082940195, -0.15296486218853164 },
1025 { 0.6740059517812944, -0.5794684678643381, 0.3239847771997537, 0.3239847771997537 },
1026 { 0.5794684678643381, -0.3239847771997537, -0.6740059517812944, -0.3239847771997537 },
1027 { 0.5029860367700724, -0.4004672082940195, -0.7504883828755602, 0.15296486218853164 },
1028 { 0.5029860367700724, 0.15296486218853164, -0.7504883828755602, -0.4004672082940195 },
1029 { 0.4553054119602712, 0.08164729285680945, -0.8828161875373585, 0.08164729285680945 },
1030 { 0.8828161875373585, -0.08164729285680945, -0.4553054119602712, -0.08164729285680945 },
1031 { 0.7504883828755602, -0.15296486218853164, -0.5029860367700724, 0.4004672082940195 },
1032 { 0.7504883828755602, 0.4004672082940195, -0.5029860367700724, -0.15296486218853164 },
1033 { 0.6740059517812944, 0.3239847771997537, -0.5794684678643381, 0.3239847771997537 },
1034 { 0.5794684678643381, -0.3239847771997537, -0.3239847771997537, -0.6740059517812944 },
1035 { 0.5029860367700724, -0.4004672082940195, 0.15296486218853164, -0.7504883828755602 },
1036 { 0.5029860367700724, 0.15296486218853164, -0.4004672082940195, -0.7504883828755602 },
1037 { 0.4553054119602712, 0.08164729285680945, 0.08164729285680945, -0.8828161875373585 },
1038 { 0.8828161875373585, -0.08164729285680945, -0.08164729285680945, -0.4553054119602712 },
1039 { 0.7504883828755602, -0.15296486218853164, 0.4004672082940195, -0.5029860367700724 },
1040 { 0.7504883828755602, 0.4004672082940195, -0.15296486218853164, -0.5029860367700724 },
1041 { 0.6740059517812944, 0.3239847771997537, 0.3239847771997537, -0.5794684678643381 },
1042 { 0.03381941603233842, 0.03381941603233842, 0.03381941603233842, 0.9982828964265062 },
1043 { -0.044802370851755174, -0.044802370851755174, 0.508629699630796, 0.8586508742123365 },
1044 { -0.044802370851755174, 0.508629699630796, -0.044802370851755174, 0.8586508742123365 },
1045 { -0.12128480194602098, 0.4321472685365301, 0.4321472685365301, 0.7821684431180708 },
1046 { 0.508629699630796, -0.044802370851755174, -0.044802370851755174, 0.8586508742123365 },
1047 { 0.4321472685365301, -0.12128480194602098, 0.4321472685365301, 0.7821684431180708 },
1048 { 0.4321472685365301, 0.4321472685365301, -0.12128480194602098, 0.7821684431180708 },
1049 { 0.37968289875261624, 0.37968289875261624, 0.37968289875261624, 0.753341017856078 },
1050 { 0.03381941603233842, 0.03381941603233842, 0.9982828964265062, 0.03381941603233842 },
1051 { -0.044802370851755174, 0.044802370851755174, 0.8586508742123365, 0.508629699630796 },
1052 { -0.044802370851755174, 0.508629699630796, 0.8586508742123365, -0.044802370851755174 },
1053 { -0.12128480194602098, 0.4321472685365301, 0.7821684431180708, 0.4321472685365301 },
1054 { 0.508629699630796, -0.044802370851755174, 0.8586508742123365, -0.044802370851755174 },
1055 { 0.4321472685365301, -0.12128480194602098, 0.7821684431180708, 0.4321472685365301 },
1056 { 0.4321472685365301, 0.4321472685365301, 0.7821684431180708, -0.12128480194602098 },
1057 { 0.37968289875261624, 0.37968289875261624, 0.753341017856078, 0.37968289875261624 },
1058 { 0.03381941603233842, 0.9982828964265062, 0.03381941603233842, 0.03381941603233842 },
1059 { -0.044802370851755174, 0.8586508742123365, -0.044802370851755174, 0.508629699630796 },
1060 { -0.044802370851755174, 0.8586508742123365, 0.508629699630796, -0.044802370851755174 },
1061 { -0.12128480194602098, 0.7821684431180708, 0.4321472685365301, 0.4321472685365301 },
1062 { 0.508629699630796, 0.8586508742123365, -0.044802370851755174, -0.044802370851755174 },
1063 { 0.4321472685365301, 0.7821684431180708, -0.12128480194602098, 0.4321472685365301 },
1064 { 0.4321472685365301, 0.7821684431180708, 0.4321472685365301, -0.12128480194602098 },
1065 { 0.37968289875261624, 0.753341017856078, 0.37968289875261624, 0.37968289875261624 },
1066 { 0.9982828964265062, 0.03381941603233842, 0.03381941603233842, 0.03381941603233842 },
1067 { 0.8586508742123365, -0.044802370851755174, -0.044802370851755174, 0.508629699630796 },
1068 { 0.8586508742123365, -0.044802370851755174, 0.508629699630796, -0.044802370851755174 },
1069 { 0.7821684431180708, -0.12128480194602098, 0.4321472685365301, 0.4321472685365301 },
1070 { 0.8586508742123365, 0.508629699630796, -0.044802370851755174, -0.044802370851755174 },
1071 { 0.7821684431180708, 0.4321472685365301, -0.12128480194602098, 0.4321472685365301 },
1072 { 0.7821684431180708, 0.4321472685365301, 0.4321472685365301, -0.12128480194602098 },
1073 { 0.753341017856078, 0.37968289875261624, 0.37968289875261624, 0.37968289875261624 },
1074 };
1075 for (int i = 0; i < grad4_size; i++) {
1076 grad4[i].dx /= N4;
1077 grad4[i].dy /= N4;
1078 grad4[i].dz /= N4;
1079 grad4[i].dw /= N4;
1080 }
1081 for (int i = 0; i < PSIZE; i++) {
1082 GRADIENTS_4D[i] = grad4[i % grad4_size];
1083 }
1084}
double noise3_XYBeforeZ(double x, double y, double z)
static Grad2 GRADIENTS_2D[PSIZE]
double noise2_Base(double xs, double ys)
double noise4_XZBeforeYW(double x, double y, double z, double w)
double noise3_BCC(double xr, double yr, double zr)
double noise2_XBeforeY(double x, double y)
double noise3_XZBeforeY(double x, double y, double z)
double noise3_Classic(double x, double y, double z)
double noise2(double x, double y)
double noise4_Classic(double x, double y, double z, double w)
double noise4_XYZBeforeW(double x, double y, double z, double w)
double noise4_Base(double xs, double ys, double zs, double ws)
double noise4_XYBeforeZW(double x, double y, double z, double w)