Serenity Operating System
1/*
2 * Copyright (c) 2022, Dan Klishch <danilklishch@gmail.com>
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 */
6
7#include <AK/Array.h>
8#include <AK/BuiltinWrappers.h>
9#include <AK/FloatingPoint.h>
10#include <AK/StringFloatingPointConversions.h>
11#include <AK/UFixedBigInt.h>
12
13namespace AK {
14
15// This entire algorithm is an implementation of the paper: Ryu: Fast Float-to-String Conversion
16// by Ulf Adams, available at https://dl.acm.org/doi/pdf/10.1145/3192366.3192369 and an implementation
17// at https://github.com/ulfjack/ryu . A lot of possible mistakes from the article were corrected, see
18// discussion at https://github.com/SerenityOS/serenity/pull/15796 .
19//
20// Not implemented for float80, as it will require an insane lookup table size (193Kb).
21//
22// Run stress tests from https://github.com/DanShaders/serenity-arithmetic-benchmark after non-trivial
23// modifications.
24
25// These approximations should match the ones used in the Python script.
26static constexpr i64 log10_5_num = 10043;
27static constexpr i64 log10_5_denum = 14369;
28
29static constexpr i64 log10_2_num = 1406;
30static constexpr i64 log10_2_denum = 4671;
31
32static constexpr i64 log2_5_num = 8245;
33static constexpr i64 log2_5_denum = 3551;
34
35template<typename Number, size_t Size1, size_t Size2>
36struct LookupInformation {
37 i32 b0, b1; // B0 and B1 from the paper (accidentally swapped)
38 Number lt[Size1];
39 Number ge[Size2];
40};
41
42template<FloatingPoint>
43int lookup_table;
44
45template<typename FloatingPoint, typename MultiplyAndShiftFunction>
46FloatingPointExponentialForm inner_convert_floating_point_to_decimal_exponential_form(FloatingPoint value, MultiplyAndShiftFunction const& multiply_and_shift)
47{
48 using Extractor = FloatExtractor<FloatingPoint>;
49
50 Extractor bit_representation { .d = value };
51
52 bool sign = bit_representation.sign;
53 i32 exponent = bit_representation.exponent;
54 u64 mantissa = bit_representation.mantissa;
55
56 // For +0, it is {.sign = 0, fraction = 0, exponent = 0},
57 // for -0, is {.sign = 1, fraction = 0, exponent = 0},
58 if (exponent == 0 && mantissa == 0)
59 return { sign, 0, 0 };
60
61 // for +inf, -inf, and NaN is undefined.
62 VERIFY(exponent != Extractor::exponent_max);
63
64 // Step 1. Decode the floating point number, and unify normalized and subnormal cases.
65 u64 real_mantissa = (exponent == 0 ? 0 : (1ull << Extractor::mantissa_bits)) + mantissa;
66 i32 real_exponent = (exponent == 0 ? 1 : exponent) - Extractor::exponent_bias - Extractor::mantissa_bits;
67 // abs(value) = real_mantissa * 2 ^ real_exponent
68
69 // Step 2. Determine the interval of information-preserving outputs.
70 // u, v, w are, respectively, lower bound for answer, exact value and upper bound for answer.
71 i32 synthetic_exponent = real_exponent - 2;
72 u64 u = 4 * real_mantissa - (mantissa == 0 && exponent > 1 ? 1 : 2);
73 u64 v = 4 * real_mantissa;
74 u64 w = 4 * real_mantissa + 2;
75 // u * 2 ^ synthetic_exponent < abs(answer) < w * 2 ^ synthetic_exponent (1)
76 // abs(value) = v * 2 ^ synthetic_exponent (yet another representation)
77
78 // Step 3'. Convert to a decimal power base and simultaneously remove most digits.
79 // We want to skip `skipped_iters' iterations of the main conversion loop and find out if
80 // last `skipped_iters' digits of u, v and w would have been zeroes.
81 i32 skipped_iters;
82 bool all_u_zero, all_v_zero, all_w_zero;
83
84 if (synthetic_exponent < 0) {
85 skipped_iters = max(0, -synthetic_exponent * log10_5_num / log10_5_denum - 1);
86
87 all_u_zero = count_trailing_zeroes(u) >= skipped_iters;
88 all_v_zero = count_trailing_zeroes(v) >= skipped_iters;
89 all_w_zero = count_trailing_zeroes(w) >= skipped_iters;
90
91 auto multiplier = lookup_table<FloatingPoint>.lt[-synthetic_exponent - skipped_iters];
92 i32 k_numerator = (log2_5_num + 1) * (-synthetic_exponent - skipped_iters);
93 i32 k = max(0, (k_numerator + log2_5_denum - 1) / log2_5_denum + lookup_table<FloatingPoint>.b0);
94 u = multiply_and_shift(u, multiplier, skipped_iters - k);
95 v = multiply_and_shift(v, multiplier, skipped_iters - k);
96 w = multiply_and_shift(w, multiplier, skipped_iters - k);
97 } else {
98 skipped_iters = max(0, synthetic_exponent * log10_2_num / log10_2_denum - 1);
99
100 // Checks if value is divisible by 5 ^ power.
101 auto is_divisible_by_pow_5 = [](u64 value, i32 power) {
102 constexpr Array<u64, 5> powers_of_five = { { 5, 25, 625, 390625, 152587890625 } };
103
104 if (power <= 0 || value == 0)
105 return true;
106 if (power >= 28) // 2 ^ 64 - 1 < 5 ^ 28
107 return false;
108
109 i32 result = 0;
110 for (i32 i = 5; i--;) {
111 if (value % powers_of_five[i] == 0) {
112 value /= powers_of_five[i];
113 result += 1 << i;
114 }
115 }
116 return result >= power;
117 };
118
119 all_u_zero = is_divisible_by_pow_5(u, skipped_iters);
120 all_v_zero = is_divisible_by_pow_5(v, skipped_iters);
121 all_w_zero = is_divisible_by_pow_5(w, skipped_iters);
122
123 auto multiplier = lookup_table<FloatingPoint>.ge[skipped_iters];
124 i32 k = log2_5_num * skipped_iters / log2_5_denum + lookup_table<FloatingPoint>.b1;
125 u = multiply_and_shift(u, multiplier, skipped_iters + k - synthetic_exponent);
126 v = multiply_and_shift(v, multiplier, skipped_iters + k - synthetic_exponent);
127 w = multiply_and_shift(w, multiplier, skipped_iters + k - synthetic_exponent);
128 }
129
130 // Step 4'. Find the shortest, correctly-rounded decimal representation in the interval.
131 bool is_even = ~mantissa & 1;
132 bool accept_smaller = is_even && all_u_zero;
133 bool accept_larger = is_even || !all_w_zero;
134
135 if (!accept_larger)
136 --w;
137
138 bool all_a_zero = accept_smaller;
139 bool all_b_zero = all_v_zero;
140 int last_digit = 0;
141
142 int exponent10 = skipped_iters - max(-synthetic_exponent, 0);
143
144 while (u / 10 < w / 10) {
145 all_a_zero &= u % 10 == 0;
146 all_b_zero &= last_digit == 0;
147 last_digit = v % 10;
148
149 u /= 10;
150 v /= 10;
151 w /= 10;
152 ++exponent10;
153 }
154 if (all_a_zero) {
155 while (u % 10 == 0) {
156 all_b_zero &= last_digit == 0;
157 last_digit = v % 10;
158
159 u /= 10;
160 v /= 10;
161 w /= 10;
162 ++exponent10;
163 }
164 }
165
166 bool is_tie = all_b_zero && last_digit == 5;
167 bool want_round_down = last_digit < 5 || (is_tie && v % 2 == 0);
168 bool round_down = (want_round_down && (u != v || all_a_zero)) || (v + 1 > w);
169 return { sign, round_down ? v : v + 1, exponent10 };
170}
171
172static u128 multiply(u64 a, u64 b)
173{
174 return UFixedBigInt<64>(a).wide_multiply(b);
175}
176
177template<>
178FloatingPointExponentialForm convert_floating_point_to_decimal_exponential_form<float>(float value)
179{
180 auto multiply_and_shift = [](u64 operand, u64 multiplier, i32 shift) {
181 auto result = multiply(operand, multiplier);
182 if (shift < 0)
183 return static_cast<u64>(result << static_cast<u32>(-shift));
184 else
185 return static_cast<u64>(result >> static_cast<u32>(shift));
186 };
187
188 return inner_convert_floating_point_to_decimal_exponential_form(value, multiply_and_shift);
189}
190
191template<>
192FloatingPointExponentialForm convert_floating_point_to_decimal_exponential_form<double>(double value)
193{
194 auto multiply_and_shift = [](u64 operand, u64 const multiplier[2], i32 shift) {
195 u128 a = multiply(operand, multiplier[0]);
196 u128 b = multiply(operand, multiplier[1]) + a.high();
197 u64 c = a.low();
198
199 if (0 <= shift && shift < 64) {
200 return (c >> shift) | (b << static_cast<u32>(64 - shift)).low();
201 } else if (shift < 0) {
202 return c << static_cast<u32>(-shift);
203 } else {
204 VERIFY(64 <= shift && shift <= 128);
205 return (b >> static_cast<u32>(shift - 64)).low();
206 }
207 };
208
209 return inner_convert_floating_point_to_decimal_exponential_form(value, multiply_and_shift);
210}
211
212// Step 0. Precompute lookup tables for the given floating point type.
213// Lookup tables was generated using the following Python script.
214/*
215from math import *
216from more_itertools import chunked
217
218
219def ifloor(x, y):
220 assert y > 0
221 if x < 0:
222 return (x - y + 1) // y
223 else:
224 return x // y
225
226
227def iceil(x, y):
228 assert y > 0
229 if x < 0:
230 return x // y
231 else:
232 return (x + y - 1) // y
233
234
235# Finds X = min(a * x % b) and Y = max(a * x % b) where 1 <= x <= N and returns (X, Y)
236# Algorithm is from https://github.com/jk-jeon/Grisu-Exact/blob/master/other_files/Grisu-Exact.pdf , p. 22
237def minmax_euclid(a, b, N):
238 a_i, b_i = a, b
239 s_i, u_i = 1, 0
240
241 while True:
242 q_i = iceil(b_i, a_i) - 1
243 b_i1 = b_i - q_i * a_i
244 u_i1 = u_i + q_i * s_i
245
246 if N < u_i1:
247 k = ifloor(N - u_i, s_i)
248 return (a_i, b - b_i + k * a_i)
249
250 p_i = iceil(a_i, b_i1) - 1
251 a_i1 = a_i - p_i * b_i1
252 s_i1 = s_i + p_i * u_i1
253
254 if N < s_i1:
255 k = ifloor(N - s_i, u_i1)
256 return (a_i - k * b_i1, b - b_i1)
257
258 if b_i1 == b_i and a_i1 == a_i:
259 if N < s_i1 + u_i1:
260 return (a_i1, b - b_i1)
261 else:
262 return (0, b - b_i1)
263
264 b_i, u_i, a_i, s_i = b_i1, u_i1, a_i1, s_i1
265
266
267assert minmax_euclid(3, 8, 5) == (1, 7)
268
269
270def calculate_lookup_tables(mantissa_bits, exponent_bits, nibbles_per_wide_digit, wide_digits_count, digit_suffix):
271 def split_by_wide_digits_and_print(value):
272 length = wide_digits_count * nibbles_per_wide_digit
273 number = reversed(list(chunked(f"{value:0{length}x}", nibbles_per_wide_digit)))
274 number = ", ".join(map(lambda x: "0x" + "".join(x) + digit_suffix, number))
275 print(f"{{ {number} }},")
276
277 mantissa_bias = 1 << mantissa_bits
278 mantissa_max = (1 << mantissa_bits) - 1
279 exponent_bias = (1 << (exponent_bits - 1)) - 1
280 exponent_max = (1 << exponent_bits) - 1
281
282 real_exponent_min = 1 - exponent_bias - mantissa_bits
283 real_exponent_max = exponent_max - exponent_bias - mantissa_bits
284 # real_exponent_min <= ef < real_exponent_max
285
286 synthetic_exponent_min = real_exponent_min - 2
287 synthetic_exponent_max = real_exponent_max - 2
288 # synthetic_exponent_min <= e2 < synthetic_exponent_max
289
290 max_synthetic_mantissa = 4 * (mantissa_bias + mantissa_max) + 2
291
292 # The following are some random approximations. Absolutely nothing special with these exact numbers.
293 LOG10_5_NUM = 10043
294 LOG10_5_DENUM = 14369
295 assert LOG10_5_NUM / LOG10_5_DENUM < log(5, 10)
296
297 LOG10_2_NUM = 1406
298 LOG10_2_DENUM = 4671
299 assert LOG10_2_NUM / LOG10_2_DENUM < log(2, 10)
300
301 LOG2_5_NUM = 8245
302 LOG2_5_DENUM = 3551
303 assert LOG2_5_NUM / LOG2_5_DENUM < log(5, 2)
304 assert (LOG2_5_NUM + 1) / LOG2_5_DENUM > log(5, 2)
305
306 # We want to find maximal b0, such that ceil(log(5, 2) * (-e2 - q)) + b0 <= k. One might plot (-e2 - q, k) from the
307 # iterations of the following loop and k = (-e2 - q) * log(5, 2) to understand the motivation behind this.
308 b0 = 0
309 q0max = 0
310
311 for e2 in range(synthetic_exponent_min, 0):
312 # q = max(0, floor(-e2 * log(5, 10)) - 1)
313 q = max(0, ifloor(-e2 * LOG10_5_NUM, LOG10_5_DENUM) - 1)
314
315 q0max = max(q0max, -e2 - q)
316 a = 5 ** (-e2 - q)
317 b = 2 ** q
318
319 [min_modular_product, _] = minmax_euclid(a, b, max_synthetic_mantissa)
320
321 # Directly via lemma 3.4 we obtain
322 # k = floor(log2(min_modular_product / max_synthetic_mantissa))
323 # But computing this directly might result in OverflowError, so we approximate the value
324 k = (min_modular_product.bit_length() - 1) - max_synthetic_mantissa.bit_length()
325
326 # "It is never wrong just to use 0"
327 # -- Some Guy
328 k = max(k, 0)
329
330 # coefficient = 5 ** (-e2 - q) // 2 ** k
331
332 # ceil(log(5, 2) * (-e2 - q)) + b0 <= k
333 # b0 <= k - ceil(log(5, 2) * (-e2 - q))
334 b0 = min(b0, k - iceil((-e2 - q) * (LOG2_5_NUM + 1), LOG2_5_DENUM))
335
336 print('b0 =', b0)
337 print('q0max =', q0max)
338 for q in range(0, q0max + 1):
339 k = max(0, iceil((LOG2_5_NUM + 1) * q, LOG2_5_DENUM) + b0)
340 coefficient = 5 ** q // 2 ** k
341 split_by_wide_digits_and_print(coefficient)
342
343
344 # Finding minimal b1, such that floor(log(5, 2) * q) + b1 >= k.
345 b1 = 0
346 q1max = 0
347
348 for e2 in range(0, synthetic_exponent_max):
349 # q = max(0, floor(e2 * log(2, 10)) - 1)
350 q = max(0, ifloor(e2 * LOG10_2_NUM, LOG10_2_DENUM) - 1)
351
352 q1max = max(q1max, q)
353 a = 2 ** (e2 - q)
354 b = 5 ** q
355
356 [_, max_modular_product] = minmax_euclid(a, b, max_synthetic_mantissa)
357
358 # Via lemma 3.3:
359 # k = ceil(log2(max_synthetic_mantissa * a * b / (b - max_modular_product)))
360 numerator = max_synthetic_mantissa * a * b
361 denumerator = b - max_modular_product
362 k = numerator.bit_length() - denumerator.bit_length() + 1
363
364 # coefficient = 2 ** k // 5 ** q + 1
365
366 # b1 = max(b1, k - floor(log(5, 2) * q))
367 b1 = max(b1, k - ifloor(q * LOG2_5_NUM, LOG2_5_DENUM))
368
369 print('b1 =', b1)
370 print('q1max =', q1max)
371 for q in range(0, q1max + 1):
372 k = ifloor(LOG2_5_NUM * q, LOG2_5_DENUM) + b1
373 coefficient = 2 ** k // 5 ** q + 1
374 split_by_wide_digits_and_print(coefficient)
375
376
377# float:
378print("float:")
379calculate_lookup_tables(
380 23, 8,
381 16, 1, "ULL"
382)
383
384# double:
385print("double:")
386calculate_lookup_tables(
387 52, 11,
388 16, 2, "ULL"
389)
390
391# long double:
392# print("long double:")
393# calculate_lookup_tables(
394# 64, 15,
395# 8, 5, "U"
396# )
397*/
398template<>
399constexpr LookupInformation<u64, 48, 30> lookup_table<float> {
400 .b0 = -64,
401 .b1 = 62,
402 .lt = {
403 0x0000000000000001ULL,
404 0x0000000000000005ULL,
405 0x0000000000000019ULL,
406 0x000000000000007dULL,
407 0x0000000000000271ULL,
408 0x0000000000000c35ULL,
409 0x0000000000003d09ULL,
410 0x000000000001312dULL,
411 0x000000000005f5e1ULL,
412 0x00000000001dcd65ULL,
413 0x00000000009502f9ULL,
414 0x0000000002e90eddULL,
415 0x000000000e8d4a51ULL,
416 0x0000000048c27395ULL,
417 0x000000016bcc41e9ULL,
418 0x000000071afd498dULL,
419 0x0000002386f26fc1ULL,
420 0x000000b1a2bc2ec5ULL,
421 0x000003782dace9d9ULL,
422 0x00001158e460913dULL,
423 0x000056bc75e2d631ULL,
424 0x0001b1ae4d6e2ef5ULL,
425 0x000878678326eac9ULL,
426 0x002a5a058fc295edULL,
427 0x00d3c21bcecceda1ULL,
428 0x0422ca8b0a00a425ULL,
429 0x14adf4b7320334b9ULL,
430 0x6765c793fa10079dULL,
431 0x813f3978f8940984ULL,
432 0xa18f07d736b90be5ULL,
433 0xc9f2c9cd04674edeULL,
434 0xfc6f7c4045812296ULL,
435 0x9dc5ada82b70b59dULL,
436 0xc5371912364ce305ULL,
437 0xf684df56c3e01bc6ULL,
438 0x9a130b963a6c115cULL,
439 0xc097ce7bc90715b3ULL,
440 0xf0bdc21abb48db20ULL,
441 0x96769950b50d88f4ULL,
442 0xbc143fa4e250eb31ULL,
443 0xeb194f8e1ae525fdULL,
444 0x92efd1b8d0cf37beULL,
445 0xb7abc627050305adULL,
446 0xe596b7b0c643c719ULL,
447 0x8f7e32ce7bea5c6fULL,
448 0xb35dbf821ae4f38bULL,
449 0xe0352f62a19e306eULL,
450 0x8c213d9da502de45ULL,
451 },
452 .ge = {
453 0x4000000000000001ULL,
454 0x3333333333333334ULL,
455 0x28f5c28f5c28f5c3ULL,
456 0x20c49ba5e353f7cfULL,
457 0x346dc5d63886594bULL,
458 0x29f16b11c6d1e109ULL,
459 0x218def416bdb1a6eULL,
460 0x35afe535795e90b0ULL,
461 0x2af31dc4611873c0ULL,
462 0x225c17d04dad2966ULL,
463 0x36f9bfb3af7b7570ULL,
464 0x2bfaffc2f2c92ac0ULL,
465 0x232f33025bd42233ULL,
466 0x384b84d092ed0385ULL,
467 0x2d09370d42573604ULL,
468 0x24075f3dceac2b37ULL,
469 0x39a5652fb1137857ULL,
470 0x2e1dea8c8da92d13ULL,
471 0x24e4bba3a4875742ULL,
472 0x3b07929f6da5586aULL,
473 0x2f394219248446bbULL,
474 0x25c768141d369efcULL,
475 0x3c7240202ebdcb2dULL,
476 0x305b66802564a28aULL,
477 0x26af8533511d4ed5ULL,
478 0x3de5a1ebb4fbb155ULL,
479 0x318481895d962777ULL,
480 0x279d346de4781f93ULL,
481 0x3f61ed7ca0c03284ULL,
482 0x32b4bdfd4d668ed0ULL,
483 },
484};
485
486template<>
487constexpr LookupInformation<u64[2], 326, 291> lookup_table<double> {
488 .b0 = -125,
489 .b1 = 125,
490 .lt = {
491 { 0x0000000000000001ULL, 0x0000000000000000ULL },
492 { 0x0000000000000005ULL, 0x0000000000000000ULL },
493 { 0x0000000000000019ULL, 0x0000000000000000ULL },
494 { 0x000000000000007dULL, 0x0000000000000000ULL },
495 { 0x0000000000000271ULL, 0x0000000000000000ULL },
496 { 0x0000000000000c35ULL, 0x0000000000000000ULL },
497 { 0x0000000000003d09ULL, 0x0000000000000000ULL },
498 { 0x000000000001312dULL, 0x0000000000000000ULL },
499 { 0x000000000005f5e1ULL, 0x0000000000000000ULL },
500 { 0x00000000001dcd65ULL, 0x0000000000000000ULL },
501 { 0x00000000009502f9ULL, 0x0000000000000000ULL },
502 { 0x0000000002e90eddULL, 0x0000000000000000ULL },
503 { 0x000000000e8d4a51ULL, 0x0000000000000000ULL },
504 { 0x0000000048c27395ULL, 0x0000000000000000ULL },
505 { 0x000000016bcc41e9ULL, 0x0000000000000000ULL },
506 { 0x000000071afd498dULL, 0x0000000000000000ULL },
507 { 0x0000002386f26fc1ULL, 0x0000000000000000ULL },
508 { 0x000000b1a2bc2ec5ULL, 0x0000000000000000ULL },
509 { 0x000003782dace9d9ULL, 0x0000000000000000ULL },
510 { 0x00001158e460913dULL, 0x0000000000000000ULL },
511 { 0x000056bc75e2d631ULL, 0x0000000000000000ULL },
512 { 0x0001b1ae4d6e2ef5ULL, 0x0000000000000000ULL },
513 { 0x000878678326eac9ULL, 0x0000000000000000ULL },
514 { 0x002a5a058fc295edULL, 0x0000000000000000ULL },
515 { 0x00d3c21bcecceda1ULL, 0x0000000000000000ULL },
516 { 0x0422ca8b0a00a425ULL, 0x0000000000000000ULL },
517 { 0x14adf4b7320334b9ULL, 0x0000000000000000ULL },
518 { 0x6765c793fa10079dULL, 0x0000000000000000ULL },
519 { 0x04fce5e3e2502611ULL, 0x0000000000000002ULL },
520 { 0x18f07d736b90be55ULL, 0x000000000000000aULL },
521 { 0x7cb2734119d3b7a9ULL, 0x0000000000000032ULL },
522 { 0x6f7c40458122964dULL, 0x00000000000000fcULL },
523 { 0x2d6d415b85acef81ULL, 0x00000000000004eeULL },
524 { 0xe32246c99c60ad85ULL, 0x00000000000018a6ULL },
525 { 0x6fab61f00de36399ULL, 0x0000000000007b42ULL },
526 { 0x2e58e9b04570f1fdULL, 0x000000000002684cULL },
527 { 0xe7bc90715b34b9f1ULL, 0x00000000000c097cULL },
528 { 0x86aed236c807a1b5ULL, 0x00000000003c2f70ULL },
529 { 0xa16a1b11e8262889ULL, 0x00000000012ced32ULL },
530 { 0x2712875988becaadULL, 0x0000000005e0a1fdULL },
531 { 0xc35ca4bfabb9f561ULL, 0x000000001d6329f1ULL },
532 { 0xd0cf37be5aa1cae5ULL, 0x0000000092efd1b8ULL },
533 { 0x140c16b7c528f679ULL, 0x00000002deaf189cULL },
534 { 0x643c7196d9ccd05dULL, 0x0000000e596b7b0cULL },
535 { 0xf52e37f2410011d1ULL, 0x00000047bf19673dULL },
536 { 0xc9e717bb45005915ULL, 0x00000166bb7f0435ULL },
537 { 0xf18376a85901bd69ULL, 0x00000701a97b150cULL },
538 { 0xb7915149bd08b30dULL, 0x000023084f676940ULL },
539 { 0x95d69670b12b7f41ULL, 0x0000af298d050e43ULL },
540 { 0xed30f03375d97c45ULL, 0x00036bcfc1194751ULL },
541 { 0xa1f4b1014d3f6d59ULL, 0x00111b0ec57e6499ULL },
542 { 0x29c77506823d22bdULL, 0x00558749db77f700ULL },
543 { 0xd0e549208b31adb1ULL, 0x01aba4714957d300ULL },
544 { 0x147a6da2b7f86475ULL, 0x085a36366eb71f04ULL },
545 { 0x33321216cbecfb24ULL, 0x14e1878814c9cd8aULL },
546 { 0xbffe969c7ee839edULL, 0x1a19e96a19fc40ecULL },
547 { 0xf7ff1e21cf512434ULL, 0x105031e2503da893ULL },
548 { 0xf5fee5aa43256d41ULL, 0x14643e5ae44d12b8ULL },
549 { 0x337e9f14d3eec892ULL, 0x197d4df19d605767ULL },
550 { 0x802f236d04753d5bULL, 0x0fee50b7025c36a0ULL },
551 { 0xa03aec4845928cb2ULL, 0x13e9e4e4c2f34448ULL },
552 { 0xc849a75a56f72fdeULL, 0x18e45e1df3b0155aULL },
553 { 0x7a5c1130ecb4fbd6ULL, 0x1f1d75a5709c1ab1ULL },
554 { 0xec798abe93f11d65ULL, 0x13726987666190aeULL },
555 { 0xa797ed6e38ed64bfULL, 0x184f03e93ff9f4daULL },
556 { 0x517de8c9c728bdefULL, 0x1e62c4e38ff87211ULL },
557 { 0xd2eeb17e1c7976b5ULL, 0x12fdbb0e39fb474aULL },
558 { 0x87aa5ddda397d462ULL, 0x17bd29d1c87a191dULL },
559 { 0xe994f5550c7dc97bULL, 0x1dac74463a989f64ULL },
560 { 0x11fd195527ce9dedULL, 0x128bc8abe49f639fULL },
561 { 0xd67c5faa71c24568ULL, 0x172ebad6ddc73c86ULL },
562 { 0x8c1b77950e32d6c2ULL, 0x1cfa698c95390ba8ULL },
563 { 0x57912abd28dfc639ULL, 0x121c81f7dd43a749ULL },
564 { 0xad75756c7317b7c8ULL, 0x16a3a275d494911bULL },
565 { 0x98d2d2c78fdda5baULL, 0x1c4c8b1349b9b562ULL },
566 { 0x9f83c3bcb9ea8794ULL, 0x11afd6ec0e14115dULL },
567 { 0x0764b4abe8652979ULL, 0x161bcca7119915b5ULL },
568 { 0x493de1d6e27e73d7ULL, 0x1ba2bfd0d5ff5b22ULL },
569 { 0x6dc6ad264d8f0866ULL, 0x1145b7e285bf98f5ULL },
570 { 0xc938586fe0f2ca80ULL, 0x159725db272f7f32ULL },
571 { 0x7b866e8bd92f7d20ULL, 0x1afcef51f0fb5effULL },
572 { 0xad34051767bdae34ULL, 0x10de1593369d1b5fULL },
573 { 0x9881065d41ad19c1ULL, 0x15159af804446237ULL },
574 { 0x7ea147f492186032ULL, 0x1a5b01b605557ac5ULL },
575 { 0x6f24ccf8db4f3c1fULL, 0x1078e111c3556cbbULL },
576 { 0x4aee003712230b27ULL, 0x14971956342ac7eaULL },
577 { 0xdda98044d6abcdf0ULL, 0x19bcdfabc13579e4ULL },
578 { 0x0a89f02b062b60b6ULL, 0x10160bcb58c16c2fULL },
579 { 0xcd2c6c35c7b638e4ULL, 0x141b8ebe2ef1c73aULL },
580 { 0x8077874339a3c71dULL, 0x1922726dbaae3909ULL },
581 { 0xe0956914080cb8e4ULL, 0x1f6b0f092959c74bULL },
582 { 0x6c5d61ac8507f38eULL, 0x13a2e965b9d81c8fULL },
583 { 0x4774ba17a649f072ULL, 0x188ba3bf284e23b3ULL },
584 { 0x1951e89d8fdc6c8fULL, 0x1eae8caef261aca0ULL },
585 { 0x0fd3316279e9c3d9ULL, 0x132d17ed577d0be4ULL },
586 { 0x13c7fdbb186434cfULL, 0x17f85de8ad5c4eddULL },
587 { 0x58b9fd29de7d4203ULL, 0x1df67562d8b36294ULL },
588 { 0xb7743e3a2b0e4942ULL, 0x12ba095dc7701d9cULL },
589 { 0xe5514dc8b5d1db92ULL, 0x17688bb5394c2503ULL },
590 { 0xdea5a13ae3465277ULL, 0x1d42aea2879f2e44ULL },
591 { 0x0b2784c4ce0bf38aULL, 0x1249ad2594c37cebULL },
592 { 0xcdf165f6018ef06dULL, 0x16dc186ef9f45c25ULL },
593 { 0x416dbf7381f2ac88ULL, 0x1c931e8ab871732fULL },
594 { 0x88e497a83137abd5ULL, 0x11dbf316b346e7fdULL },
595 { 0xeb1dbd923d8596caULL, 0x1652efdc6018a1fcULL },
596 { 0x25e52cf6cce6fc7dULL, 0x1be7abd3781eca7cULL },
597 { 0x97af3c1a40105dceULL, 0x1170cb642b133e8dULL },
598 { 0xfd9b0b20d0147542ULL, 0x15ccfe3d35d80e30ULL },
599 { 0x3d01cde904199292ULL, 0x1b403dcc834e11bdULL },
600 { 0x462120b1a28ffb9bULL, 0x1108269fd210cb16ULL },
601 { 0xd7a968de0b33fa82ULL, 0x154a3047c694fddbULL },
602 { 0xcd93c3158e00f923ULL, 0x1a9cbc59b83a3d52ULL },
603 { 0xc07c59ed78c09bb6ULL, 0x10a1f5b813246653ULL },
604 { 0xb09b7068d6f0c2a3ULL, 0x14ca732617ed7fe8ULL },
605 { 0xdcc24c830cacf34cULL, 0x19fd0fef9de8dfe2ULL },
606 { 0xc9f96fd1e7ec180fULL, 0x103e29f5c2b18bedULL },
607 { 0x3c77cbc661e71e13ULL, 0x144db473335deee9ULL },
608 { 0x8b95beb7fa60e598ULL, 0x1961219000356aa3ULL },
609 { 0x373d9732fc7c8f7fULL, 0x0fdcb4fa002162a6ULL },
610 { 0xc50cfcffbb9bb35fULL, 0x13d3e2388029bb4fULL },
611 { 0xb6503c3faa82a037ULL, 0x18c8dac6a0342a23ULL },
612 { 0xa3e44b4f95234844ULL, 0x1efb1178484134acULL },
613 { 0xe66eaf11bd360d2bULL, 0x135ceaeb2d28c0ebULL },
614 { 0xe00a5ad62c839075ULL, 0x183425a5f872f126ULL },
615 { 0x980cf18bb7a47493ULL, 0x1e412f0f768fad70ULL },
616 { 0x5f0816f752c6c8dcULL, 0x12e8bd69aa19cc66ULL },
617 { 0xf6ca1cb527787b13ULL, 0x17a2ecc414a03f7fULL },
618 { 0xf47ca3e2715699d7ULL, 0x1d8ba7f519c84f5fULL },
619 { 0xf8cde66d86d62026ULL, 0x127748f9301d319bULL },
620 { 0xf7016008e88ba830ULL, 0x17151b377c247e02ULL },
621 { 0xb4c1b80b22ae923cULL, 0x1cda62055b2d9d83ULL },
622 { 0x50f91306f5ad1b65ULL, 0x12087d4358fc8272ULL },
623 { 0xe53757c8b318623fULL, 0x168a9c942f3ba30eULL },
624 { 0x9e852dbadfde7acfULL, 0x1c2d43b93b0a8bd2ULL },
625 { 0xa3133c94cbeb0cc1ULL, 0x119c4a53c4e69763ULL },
626 { 0x8bd80bb9fee5cff1ULL, 0x16035ce8b6203d3cULL },
627 { 0xaece0ea87e9f43eeULL, 0x1b843422e3a84c8bULL },
628 { 0x4d40c9294f238a75ULL, 0x1132a095ce492fd7ULL },
629 { 0x2090fb73a2ec6d12ULL, 0x157f48bb41db7bcdULL },
630 { 0x68b53a508ba78856ULL, 0x1adf1aea12525ac0ULL },
631 { 0x417144725748b536ULL, 0x10cb70d24b7378b8ULL },
632 { 0x51cd958eed1ae283ULL, 0x14fe4d06de5056e6ULL },
633 { 0xe640faf2a8619b24ULL, 0x1a3de04895e46c9fULL },
634 { 0xefe89cd7a93d00f7ULL, 0x1066ac2d5daec3e3ULL },
635 { 0xebe2c40d938c4134ULL, 0x14805738b51a74dcULL },
636 { 0x26db7510f86f5181ULL, 0x19a06d06e2611214ULL },
637 { 0x9849292a9b4592f1ULL, 0x100444244d7cab4cULL },
638 { 0xbe5b73754216f7adULL, 0x1405552d60dbd61fULL },
639 { 0xadf25052929cb598ULL, 0x1906aa78b912cba7ULL },
640 { 0xccb772339ba1f17fULL, 0x0fa42a8b73abbf48ULL },
641 { 0xffe54ec0828a6ddfULL, 0x138d352e5096af1aULL },
642 { 0xbfdea270a32d0957ULL, 0x18708279e4bc5ae1ULL },
643 { 0x2fd64b0ccbf84badULL, 0x1e8ca3185deb719aULL },
644 { 0x5de5eee7ff7b2f4cULL, 0x1317e5ef3ab32700ULL },
645 { 0x755f6aa1ff59fb1fULL, 0x17dddf6b095ff0c0ULL },
646 { 0x92b7454a7f3079e7ULL, 0x1dd55745cbb7ecf0ULL },
647 { 0x5bb28b4e8f7e4c30ULL, 0x12a5568b9f52f416ULL },
648 { 0xf29f2e22335ddf3cULL, 0x174eac2e8727b11bULL },
649 { 0xef46f9aac035570bULL, 0x1d22573a28f19d62ULL },
650 { 0xd58c5c0ab8215667ULL, 0x123576845997025dULL },
651 { 0x4aef730d6629ac01ULL, 0x16c2d4256ffcc2f5ULL },
652 { 0x9dab4fd0bfb41701ULL, 0x1c73892ecbfbf3b2ULL },
653 { 0xa28b11e277d08e60ULL, 0x11c835bd3f7d784fULL },
654 { 0x8b2dd65b15c4b1f9ULL, 0x163a432c8f5cd663ULL },
655 { 0x6df94bf1db35de77ULL, 0x1bc8d3f7b3340bfcULL },
656 { 0xc4bbcf772901ab0aULL, 0x115d847ad000877dULL },
657 { 0x35eac354f34215cdULL, 0x15b4e5998400a95dULL },
658 { 0x8365742a30129b40ULL, 0x1b221effe500d3b4ULL },
659 { 0xd21f689a5e0ba108ULL, 0x10f5535fef208450ULL },
660 { 0x06a742c0f58e894aULL, 0x1532a837eae8a565ULL },
661 { 0x4851137132f22b9dULL, 0x1a7f5245e5a2cebeULL },
662 { 0xed32ac26bfd75b42ULL, 0x108f936baf85c136ULL },
663 { 0xa87f57306fcd3212ULL, 0x14b378469b673184ULL },
664 { 0xd29f2cfc8bc07e97ULL, 0x19e056584240fde5ULL },
665 { 0xa3a37c1dd7584f1eULL, 0x102c35f729689eafULL },
666 { 0x8c8c5b254d2e62e6ULL, 0x14374374f3c2c65bULL },
667 { 0x6faf71eea079fb9fULL, 0x1945145230b377f2ULL },
668 { 0x85cda735244c3d43ULL, 0x0fcb2cb35e702af7ULL },
669 { 0x674111026d5f4c94ULL, 0x13bdf7e0360c35b5ULL },
670 { 0xc111554308b71fbaULL, 0x18ad75d8438f4322ULL },
671 { 0x7155aa93cae4e7a8ULL, 0x1ed8d34e547313ebULL },
672 { 0x26d58a9c5ecf10c9ULL, 0x13478410f4c7ec73ULL },
673 { 0xf08aed437682d4fbULL, 0x1819651531f9e78fULL },
674 { 0xecada89454238a3aULL, 0x1e1fbe5a7e786173ULL },
675 { 0x73ec895cb4963664ULL, 0x12d3d6f88f0b3ce8ULL },
676 { 0x90e7abb3e1bbc3fdULL, 0x1788ccb6b2ce0c22ULL },
677 { 0x352196a0da2ab4fdULL, 0x1d6affe45f818f2bULL },
678 { 0x0134fe24885ab11eULL, 0x1262dfeebbb0f97bULL },
679 { 0xc1823dadaa715d65ULL, 0x16fb97ea6a9d37d9ULL },
680 { 0x31e2cd19150db4bfULL, 0x1cba7de5054485d0ULL },
681 { 0x1f2dc02fad2890f7ULL, 0x11f48eaf234ad3a2ULL },
682 { 0xa6f9303b9872b535ULL, 0x1671b25aec1d888aULL },
683 { 0x50b77c4a7e8f6282ULL, 0x1c0e1ef1a724eaadULL },
684 { 0x5272adae8f199d91ULL, 0x1188d357087712acULL },
685 { 0x670f591a32e004f6ULL, 0x15eb082cca94d757ULL },
686 { 0x40d32f60bf980633ULL, 0x1b65ca37fd3a0d2dULL },
687 { 0x4883fd9c77bf03e0ULL, 0x111f9e62fe44483cULL },
688 { 0x5aa4fd0395aec4d8ULL, 0x156785fbbdd55a4bULL },
689 { 0x314e3c447b1a760eULL, 0x1ac1677aad4ab0deULL },
690 { 0xded0e5aaccf089c9ULL, 0x10b8e0acac4eae8aULL },
691 { 0x96851f15802cac3bULL, 0x14e718d7d7625a2dULL },
692 { 0xfc2666dae037d74aULL, 0x1a20df0dcd3af0b8ULL },
693 { 0x9d980048cc22e68eULL, 0x10548b68a044d673ULL },
694 { 0x84fe005aff2ba032ULL, 0x1469ae42c8560c10ULL },
695 { 0xa63d8071bef6883eULL, 0x198419d37a6b8f14ULL },
696 { 0xe7e67047175a1527ULL, 0x0ff290242c83396cULL },
697 { 0x21e00c58dd309a70ULL, 0x13ef342d37a407c8ULL },
698 { 0x2a580f6f147cc10dULL, 0x18eb0138858d09baULL },
699 { 0x5a7709a56ccdf8a8ULL, 0x0f92e0c353782614ULL },
700 { 0x7114cc0ec80176d2ULL, 0x137798f428562f99ULL },
701 { 0xcd59ff127a01d486ULL, 0x18557f31326bbb7fULL },
702 { 0xc0b07ed7188249a8ULL, 0x1e6adefd7f06aa5fULL },
703 { 0xd86e4f466f516e09ULL, 0x1302cb5e6f642a7bULL },
704 { 0xce89e3180b25c98bULL, 0x17c37e360b3d351aULL },
705 { 0x822c5bde0def3beeULL, 0x1db45dc38e0c8261ULL },
706 { 0xf15bb96ac8b58575ULL, 0x1290ba9a38c7d17cULL },
707 { 0x2db2a7c57ae2e6d2ULL, 0x1734e940c6f9c5dcULL },
708 { 0x391f51b6d99ba086ULL, 0x1d022390f8b83753ULL },
709 { 0x03b3931248014454ULL, 0x1221563a9b732294ULL },
710 { 0x04a077d6da019569ULL, 0x16a9abc9424feb39ULL },
711 { 0x45c895cc9081fac3ULL, 0x1c5416bb92e3e607ULL },
712 { 0x8b9d5d9fda513cbaULL, 0x11b48e353bce6fc4ULL },
713 { 0xae84b507d0e58be8ULL, 0x1621b1c28ac20bb5ULL },
714 { 0x1a25e249c51eeee3ULL, 0x1baa1e332d728ea3ULL },
715 { 0xf057ad6e1b33554dULL, 0x114a52dffc679925ULL },
716 { 0x6c6d98c9a2002aa1ULL, 0x159ce797fb817f6fULL },
717 { 0x4788fefc0a803549ULL, 0x1b04217dfa61df4bULL },
718 { 0x0cb59f5d8690214eULL, 0x10e294eebc7d2b8fULL },
719 { 0xcfe30734e83429a1ULL, 0x151b3a2a6b9c7672ULL },
720 { 0x83dbc9022241340aULL, 0x1a6208b50683940fULL },
721 { 0xb2695da15568c086ULL, 0x107d457124123c89ULL },
722 { 0x1f03b509aac2f0a7ULL, 0x149c96cd6d16cbacULL },
723 { 0x26c4a24c1573acd1ULL, 0x19c3bc80c85c7e97ULL },
724 { 0x783ae56f8d684c03ULL, 0x101a55d07d39cf1eULL },
725 { 0x16499ecb70c25f03ULL, 0x1420eb449c8842e6ULL },
726 { 0x9bdc067e4cf2f6c4ULL, 0x19292615c3aa539fULL },
727 { 0xc169840ef017da3bULL, 0x0fb9b7cd9a4a7443ULL },
728 { 0xb1c3e512ac1dd0c9ULL, 0x13a825c100dd1154ULL },
729 { 0xde34de57572544fcULL, 0x18922f31411455a9ULL },
730 { 0x55c215ed2cee963bULL, 0x1eb6bafd91596b14ULL },
731 { 0xb5994db43c151de5ULL, 0x133234de7ad7e2ecULL },
732 { 0xe2ffa1214b1a655eULL, 0x17fec216198ddba7ULL },
733 { 0xdbbf89699de0feb6ULL, 0x1dfe729b9ff15291ULL },
734 { 0x2957b5e202ac9f31ULL, 0x12bf07a143f6d39bULL },
735 { 0xf3ada35a8357c6feULL, 0x176ec98994f48881ULL },
736 { 0x70990c31242db8bdULL, 0x1d4a7bebfa31aaa2ULL },
737 { 0x865fa79eb69c9376ULL, 0x124e8d737c5f0aa5ULL },
738 { 0xe7f791866443b854ULL, 0x16e230d05b76cd4eULL },
739 { 0xa1f575e7fd54a669ULL, 0x1c9abd04725480a2ULL },
740 { 0xa53969b0fe54e801ULL, 0x11e0b622c774d065ULL },
741 { 0x0e87c41d3dea2202ULL, 0x1658e3ab7952047fULL },
742 { 0xd229b5248d64aa82ULL, 0x1bef1c9657a6859eULL },
743 { 0x435a1136d85eea91ULL, 0x117571ddf6c81383ULL },
744 { 0x143095848e76a536ULL, 0x15d2ce55747a1864ULL },
745 { 0x193cbae5b2144e83ULL, 0x1b4781ead1989e7dULL },
746 { 0x2fc5f4cf8f4cb112ULL, 0x110cb132c2ff630eULL },
747 { 0xbbb77203731fdd56ULL, 0x154fdd7f73bf3bd1ULL },
748 { 0x2aa54e844fe7d4acULL, 0x1aa3d4df50af0ac6ULL },
749 { 0xdaa75112b1f0e4ebULL, 0x10a6650b926d66bbULL },
750 { 0xd15125575e6d1e26ULL, 0x14cffe4e7708c06aULL },
751 { 0x85a56ead360865b0ULL, 0x1a03fde214caf085ULL },
752 { 0x7387652c41c53f8eULL, 0x10427ead4cfed653ULL },
753 { 0x50693e7752368f71ULL, 0x14531e58a03e8be8ULL },
754 { 0x64838e1526c4334eULL, 0x1967e5eec84e2ee2ULL },
755 { 0x7ed238cd383aa011ULL, 0x0fe0efb53d30dd4dULL },
756 { 0xde86c70086494815ULL, 0x13d92ba28c7d14a0ULL },
757 { 0x162878c0a7db9a1aULL, 0x18cf768b2f9c59c9ULL },
758 { 0xadd94b7868e94050ULL, 0x0f81aa16fdc1b81dULL },
759 { 0x194f9e5683239064ULL, 0x1362149cbd322625ULL },
760 { 0x5fa385ec23ec747eULL, 0x183a99c3ec7eafaeULL },
761 { 0xf78c67672ce7919dULL, 0x1e494034e79e5b99ULL },
762 { 0x3ab7c0a07c10bb02ULL, 0x12edc82110c2f940ULL },
763 { 0x4965b0c89b14e9c3ULL, 0x17a93a2954f3b790ULL },
764 { 0x5bbf1cfac1da2433ULL, 0x1d9388b3aa30a574ULL },
765 { 0xb957721cb92856a0ULL, 0x127c35704a5e6768ULL },
766 { 0xe7ad4ea3e7726c48ULL, 0x171b42cc5cf60142ULL },
767 { 0xa198a24ce14f075aULL, 0x1ce2137f74338193ULL },
768 { 0x44ff65700cd16498ULL, 0x120d4c2fa8a030fcULL },
769 { 0x563f3ecc1005bdbeULL, 0x16909f3b92c83d3bULL },
770 { 0x2bcf0e7f14072d2eULL, 0x1c34c70a777a4c8aULL },
771 { 0x5b61690f6c847c3dULL, 0x11a0fc668aac6fd6ULL },
772 { 0xf239c35347a59b4cULL, 0x16093b802d578bcbULL },
773 { 0xeec83428198f021fULL, 0x1b8b8a6038ad6ebeULL },
774 { 0x553d20990ff96153ULL, 0x1137367c236c6537ULL },
775 { 0x2a8c68bf53f7b9a8ULL, 0x1585041b2c477e85ULL },
776 { 0x752f82ef28f5a812ULL, 0x1ae64521f7595e26ULL },
777 { 0x093db1d57999890bULL, 0x10cfeb353a97dad8ULL },
778 { 0x0b8d1e4ad7ffeb4eULL, 0x1503e602893dd18eULL },
779 { 0x8e7065dd8dffe622ULL, 0x1a44df832b8d45f1ULL },
780 { 0xf9063faa78bfefd5ULL, 0x106b0bb1fb384bb6ULL },
781 { 0xb747cf9516efebcaULL, 0x1485ce9e7a065ea4ULL },
782 { 0xe519c37a5cabe6bdULL, 0x19a742461887f64dULL },
783 { 0xaf301a2c79eb7036ULL, 0x1008896bcf54f9f0ULL },
784 { 0xdafc20b798664c43ULL, 0x140aabc6c32a386cULL },
785 { 0x11bb28e57e7fdf54ULL, 0x190d56b873f4c688ULL },
786 { 0x0b14f98f6f0feb95ULL, 0x0fa856334878fc15ULL },
787 { 0x4dda37f34ad3e67aULL, 0x13926bc01a973b1aULL },
788 { 0xe150c5f01d88e019ULL, 0x187706b0213d09e0ULL },
789 { 0x8cd27bb612758c0fULL, 0x0f4a642e14c6262cULL },
790 { 0xb0071aa39712ef13ULL, 0x131cfd3999f7afb7ULL },
791 { 0x9c08e14c7cd7aad8ULL, 0x17e43c8800759ba5ULL },
792 { 0x030b199f9c0d958eULL, 0x1ddd4baa0093028fULL },
793 { 0x61e6f003c1887d79ULL, 0x12aa4f4a405be199ULL },
794 { 0xba60ac04b1ea9cd7ULL, 0x1754e31cd072d9ffULL },
795 { 0xa8f8d705de65440dULL, 0x1d2a1be4048f907fULL },
796 { 0xc99b8663aaff4a88ULL, 0x123a516e82d9ba4fULL },
797 { 0xbc0267fc95bf1d2aULL, 0x16c8e5ca239028e3ULL },
798 { 0xab0301fbbb2ee474ULL, 0x1c7b1f3cac74331cULL },
799 { 0xeae1e13d54fd4ec9ULL, 0x11ccf385ebc89ff1ULL },
800 { 0x659a598caa3ca27bULL, 0x1640306766bac7eeULL },
801 { 0xff00efefd4cbcb1aULL, 0x1bd03c81406979e9ULL },
802 { 0x3f6095f5e4ff5ef0ULL, 0x116225d0c841ec32ULL },
803 { 0xcf38bb735e3f36acULL, 0x15baaf44fa52673eULL },
804 { 0x8306ea5035cf0457ULL, 0x1b295b1638e7010eULL },
805 { 0x11e4527221a162b6ULL, 0x10f9d8ede39060a9ULL },
806 { 0x565d670eaa09bb64ULL, 0x15384f295c7478d3ULL },
807 { 0x2bf4c0d2548c2a3dULL, 0x1a8662f3b3919708ULL },
808 { 0x1b78f88374d79a66ULL, 0x1093fdd8503afe65ULL },
809 { 0x625736a4520d8100ULL, 0x14b8fd4e6449bdfeULL },
810 { 0xfaed044d6690e140ULL, 0x19e73ca1fd5c2d7dULL },
811 { 0xbcd422b0601a8cc8ULL, 0x103085e53e599c6eULL },
812 { 0x6c092b5c78212ffaULL, 0x143ca75e8df0038aULL },
813 { 0x070b763396297bf8ULL, 0x194bd136316c046dULL },
814 { 0x246729e03dd9ed7bULL, 0x0fcf62c1dee382c4ULL },
815 { 0x2d80f4584d5068daULL, 0x13c33b72569c6375ULL },
816 { 0x78e1316e60a48310ULL, 0x18b40a4eec437c52ULL },
817 },
818 .ge = {
819 { 0x0000000000000001ULL, 0x2000000000000000ULL },
820 { 0x999999999999999aULL, 0x1999999999999999ULL },
821 { 0x47ae147ae147ae15ULL, 0x147ae147ae147ae1ULL },
822 { 0x6c8b4395810624deULL, 0x10624dd2f1a9fbe7ULL },
823 { 0x7a786c226809d496ULL, 0x1a36e2eb1c432ca5ULL },
824 { 0x61f9f01b866e43abULL, 0x14f8b588e368f084ULL },
825 { 0xb4c7f34938583622ULL, 0x10c6f7a0b5ed8d36ULL },
826 { 0x87a6520ec08d236aULL, 0x1ad7f29abcaf4857ULL },
827 { 0x9fb841a566d74f88ULL, 0x15798ee2308c39dfULL },
828 { 0xe62d01511f12a607ULL, 0x112e0be826d694b2ULL },
829 { 0xd6ae6881cb5109a4ULL, 0x1b7cdfd9d7bdbab7ULL },
830 { 0xdef1ed34a2a73aeaULL, 0x15fd7fe17964955fULL },
831 { 0x7f27f0f6e885c8bbULL, 0x119799812dea1119ULL },
832 { 0x650cb4be40d60df8ULL, 0x1c25c268497681c2ULL },
833 { 0xea70909833de7193ULL, 0x16849b86a12b9b01ULL },
834 { 0x21f3a6e0297ec143ULL, 0x1203af9ee756159bULL },
835 { 0x6985d7cd0f313537ULL, 0x1cd2b297d889bc2bULL },
836 { 0x2137dfd73f5a90f9ULL, 0x170ef54646d49689ULL },
837 { 0xe75fe645cc4873faULL, 0x12725dd1d243aba0ULL },
838 { 0xa5663d3c7a0d865dULL, 0x1d83c94fb6d2ac34ULL },
839 { 0x511e976394d79eb1ULL, 0x179ca10c9242235dULL },
840 { 0xda7edf82dd794bc1ULL, 0x12e3b40a0e9b4f7dULL },
841 { 0x2a6498d1625bac68ULL, 0x1e392010175ee596ULL },
842 { 0xeeb6e0a781e2f053ULL, 0x182db34012b25144ULL },
843 { 0x58924d52ce4f26a9ULL, 0x1357c299a88ea76aULL },
844 { 0x27507bb7b07ea441ULL, 0x1ef2d0f5da7dd8aaULL },
845 { 0x52a6c95fc0655034ULL, 0x18c240c4aecb13bbULL },
846 { 0x0eebd44c99eaa690ULL, 0x13ce9a36f23c0fc9ULL },
847 { 0xb17953adc3110a80ULL, 0x1fb0f6be50601941ULL },
848 { 0xc12ddc8b02740867ULL, 0x195a5efea6b34767ULL },
849 { 0x3424b06f3529a052ULL, 0x14484bfeebc29f86ULL },
850 { 0x901d59f290ee19dbULL, 0x1039d66589687f9eULL },
851 { 0x4cfbc31db4b0295fULL, 0x19f623d5a8a73297ULL },
852 { 0x3d9635b15d59bab2ULL, 0x14c4e977ba1f5bacULL },
853 { 0x97ab5e277de16228ULL, 0x109d8792fb4c4956ULL },
854 { 0xf2abc9d8c9689d0dULL, 0x1a95a5b7f87a0ef0ULL },
855 { 0x5bbca17a3aba173eULL, 0x154484932d2e725aULL },
856 { 0xafca1ac82efb45cbULL, 0x11039d428a8b8eaeULL },
857 { 0xb2dcf7a6b1920945ULL, 0x1b38fb9daa78e44aULL },
858 { 0xf57d92ebc141a104ULL, 0x15c72fb1552d836eULL },
859 { 0xc46475896767b403ULL, 0x116c262777579c58ULL },
860 { 0x6d6d88dbd8a5ecd2ULL, 0x1be03d0bf225c6f4ULL },
861 { 0x8abe071646eb23dbULL, 0x164cfda3281e38c3ULL },
862 { 0x6efe6c11d255b649ULL, 0x11d7314f534b609cULL },
863 { 0xb197134fb6ef8a0eULL, 0x1c8b821885456760ULL },
864 { 0x27ac0f72f8bfa1a5ULL, 0x16d601ad376ab91aULL },
865 { 0xb95672c260994e1eULL, 0x1244ce242c5560e1ULL },
866 { 0xf5571e03cdc21695ULL, 0x1d3ae36d13bbce35ULL },
867 { 0x2aac18030b01ababULL, 0x17624f8a762fd82bULL },
868 { 0xbbbce0026f348956ULL, 0x12b50c6ec4f31355ULL },
869 { 0x92c7ccd0b1eda889ULL, 0x1dee7a4ad4b81eefULL },
870 { 0xdbd30a408e57ba07ULL, 0x17f1fb6f10934bf2ULL },
871 { 0x7ca8d50071dfc806ULL, 0x1327fc58da0f6ff5ULL },
872 { 0xfaa7bb33e9660cd6ULL, 0x1ea6608e29b24cbbULL },
873 { 0x9552fc298784d711ULL, 0x18851a0b548ea3c9ULL },
874 { 0xaaa8c9bad2d0ac0eULL, 0x139dae6f76d88307ULL },
875 { 0xdddadc5e1e1aace3ULL, 0x1f62b0b257c0d1a5ULL },
876 { 0x7e48b04b4b488a4fULL, 0x191bc08eac9a4151ULL },
877 { 0xcb6d59d5d5d3a1d9ULL, 0x141633a556e1cddaULL },
878 { 0x3c577b1177dc817bULL, 0x1011c2eaabe7d7e2ULL },
879 { 0xc6f25e825960cf2aULL, 0x19b604aaaca62636ULL },
880 { 0x6bf518684780a5bbULL, 0x14919d5556eb51c5ULL },
881 { 0x232a79ed06008496ULL, 0x10747ddddf22a7d1ULL },
882 { 0xd1dd8fe1a3340756ULL, 0x1a53fc9631d10c81ULL },
883 { 0xa7e4731ae8f66c45ULL, 0x150ffd44f4a73d34ULL },
884 { 0x531d28e253f8569eULL, 0x10d9976a5d52975dULL },
885 { 0xeb61db03b98d5762ULL, 0x1af5bf109550f22eULL },
886 { 0xbc4e48cfc7a445e8ULL, 0x159165a6ddda5b58ULL },
887 { 0x6371d3d96c836b20ULL, 0x11411e1f17e1e2adULL },
888 { 0x9f1c8628ad9f11cdULL, 0x1b9b6364f3030448ULL },
889 { 0xe5b06b53be18db0bULL, 0x1615e91d8f359d06ULL },
890 { 0xeaf3890fcb4715a2ULL, 0x11ab20e472914a6bULL },
891 { 0x44b8db4c7871bc37ULL, 0x1c45016d841baa46ULL },
892 { 0x03c715d6c6c1635fULL, 0x169d9abe03495505ULL },
893 { 0x3638de456bcde919ULL, 0x1217aefe69077737ULL },
894 { 0x56c163a2461641c1ULL, 0x1cf2b1970e725858ULL },
895 { 0xdf011c81d1ab67ceULL, 0x17288e1271f51379ULL },
896 { 0x7f3416ce4155eca5ULL, 0x1286d80ec190dc61ULL },
897 { 0x6520247d3556476eULL, 0x1da48ce468e7c702ULL },
898 { 0xea801d30f7783925ULL, 0x17b6d71d20b96c01ULL },
899 { 0xbb99b0f3f92cfa84ULL, 0x12f8ac174d612334ULL },
900 { 0x5f5c4e532847f739ULL, 0x1e5aacf215683854ULL },
901 { 0x7f7d0b75b9d32c2eULL, 0x18488a5b44536043ULL },
902 { 0x9930d5f7c7dc2358ULL, 0x136d3b7c36a919cfULL },
903 { 0x8eb4898c72f9d226ULL, 0x1f152bf9f10e8fb2ULL },
904 { 0x722a07a38f2e41b8ULL, 0x18ddbcc7f40ba628ULL },
905 { 0xc1bb394fa5be9afaULL, 0x13e497065cd61e86ULL },
906 { 0x9c5ec2190930f7f6ULL, 0x1fd424d6faf030d7ULL },
907 { 0x49e56814075a5ff8ULL, 0x197683df2f268d79ULL },
908 { 0x6e51201005e1e660ULL, 0x145ecfe5bf520ac7ULL },
909 { 0xf1da800cd181851aULL, 0x104bd984990e6f05ULL },
910 { 0x4fc400148268d4f5ULL, 0x1a12f5a0f4e3e4d6ULL },
911 { 0xd96999aa01ed772bULL, 0x14dbf7b3f71cb711ULL },
912 { 0xadee1488018ac5bcULL, 0x10aff95cc5b09274ULL },
913 { 0x497ceda668de092cULL, 0x1ab328946f80ea54ULL },
914 { 0x3aca57b853e4d424ULL, 0x155c2076bf9a5510ULL },
915 { 0x623b7960431d7683ULL, 0x1116805effaeaa73ULL },
916 { 0x9d2bf566d1c8bd9eULL, 0x1b5733cb32b110b8ULL },
917 { 0x7dbcc452416d647fULL, 0x15df5ca28ef40d60ULL },
918 { 0xcafd69db678ab6ccULL, 0x117f7d4ed8c33de6ULL },
919 { 0xab2f0fc572778adfULL, 0x1bff2ee48e052fd7ULL },
920 { 0x88f273045b92d580ULL, 0x1665bf1d3e6a8cacULL },
921 { 0xd3f528d049424466ULL, 0x11eaff4a98553d56ULL },
922 { 0xb988414d4203a0a3ULL, 0x1cab3210f3bb9557ULL },
923 { 0x6139cdd76802e6e9ULL, 0x16ef5b40c2fc7779ULL },
924 { 0xe761717920025254ULL, 0x125915cd68c9f92dULL },
925 { 0xa568b58e999d5086ULL, 0x1d5b561574765b7cULL },
926 { 0x5120913ee14aa6d2ULL, 0x177c44ddf6c515fdULL },
927 { 0xa74d40ff1aa21f0eULL, 0x12c9d0b1923744caULL },
928 { 0x0baece64f769cb4aULL, 0x1e0fb44f50586e11ULL },
929 { 0x3c8bd850c5ee3c3bULL, 0x180c903f7379f1a7ULL },
930 { 0xca0979da37f1c9c9ULL, 0x133d4032c2c7f485ULL },
931 { 0xa9a8c2f6bfe942dbULL, 0x1ec866b79e0cba6fULL },
932 { 0x2153cf2bccba9be3ULL, 0x18a0522c7e709526ULL },
933 { 0x1aa9728970954982ULL, 0x13b374f06526ddb8ULL },
934 { 0xf775840f1a88759dULL, 0x1f8587e7083e2f8cULL },
935 { 0x5f9136727ba05e17ULL, 0x19379fec0698260aULL },
936 { 0x1940f85b9619e4dfULL, 0x142c7ff0054684d5ULL },
937 { 0xe100c6afab47ea4cULL, 0x1023998cd1053710ULL },
938 { 0xce67a44c453fdd47ULL, 0x19d28f47b4d524e7ULL },
939 { 0xd852e9d69dccb106ULL, 0x14a8729fc3ddb71fULL },
940 { 0x79dbee454b0a2738ULL, 0x1086c219697e2c19ULL },
941 { 0x295fe3a211a9d859ULL, 0x1a71368f0f30468fULL },
942 { 0xbab31c81a7bb137aULL, 0x15275ed8d8f36ba5ULL },
943 { 0x6228e39aec95a92fULL, 0x10ec4be0ad8f8951ULL },
944 { 0x9d0e38f7e0ef7517ULL, 0x1b13ac9aaf4c0ee8ULL },
945 { 0xb0d82d931a592a79ULL, 0x15a956e225d67253ULL },
946 { 0x8d79be0f4847552eULL, 0x11544581b7dec1dcULL },
947 { 0x158f967eda0bbb7cULL, 0x1bba08cf8c979c94ULL },
948 { 0x77a611ff14d62f97ULL, 0x162e6d72d6dfb076ULL },
949 { 0xf951a7ff43de8c79ULL, 0x11bebdf578b2f391ULL },
950 { 0xc21c3ffed2fdad8eULL, 0x1c6463225ab7ec1cULL },
951 { 0x01b0333242648ad8ULL, 0x16b6b5b5155ff017ULL },
952 { 0x0159c28e9b83a246ULL, 0x122bc490dde659acULL },
953 { 0xcef604175f3903a3ULL, 0x1d12d41afca3c2acULL },
954 { 0x725e69ac4c2d9c83ULL, 0x17424348ca1c9bbdULL },
955 { 0xf5185489d68ae39cULL, 0x129b69070816e2fdULL },
956 { 0xee8d540fbdab05c6ULL, 0x1dc574d80cf16b2fULL },
957 { 0xbed77672fe226b05ULL, 0x17d12a4670c1228cULL },
958 { 0xff12c528cb4ebc04ULL, 0x130dbb6b8d674ed6ULL },
959 { 0xcb513b74787df9a0ULL, 0x1e7c5f127bd87e24ULL },
960 { 0x090dc929f9fe614dULL, 0x18637f41fcad31b7ULL },
961 { 0xa0d7d42194cb810aULL, 0x1382cc34ca2427c5ULL },
962 { 0x67bfb9cf5478ce77ULL, 0x1f37ad21436d0c6fULL },
963 { 0x1fcc94a5dd2d71f9ULL, 0x18f9574dcf8a7059ULL },
964 { 0x7fd6dd517dbdf4c7ULL, 0x13faac3e3fa1f37aULL },
965 { 0xffdf17746497f706ULL, 0x0ffbbcfe994e5c61ULL },
966 { 0x6631bf20a0f324d6ULL, 0x1992c7fdc216fa36ULL },
967 { 0xb827cc1a1a5c1d78ULL, 0x14756ccb01abfb5eULL },
968 { 0x935309ae7b7ce460ULL, 0x105df0a267bcc918ULL },
969 { 0x1eeb42b0c594a099ULL, 0x1a2fe76a3f9474f4ULL },
970 { 0xe58902270476e6e1ULL, 0x14f31f8832dd2a5cULL },
971 { 0xb7a0ce859d2bebe7ULL, 0x10c27fa028b0eeb0ULL },
972 { 0x59014a6f61dfdfd8ULL, 0x1ad0cc33744e4ab4ULL },
973 { 0xe0cdd525e7e64cadULL, 0x1573d68f903ea229ULL },
974 { 0x4d7177518651d6f1ULL, 0x11297872d9cbb4eeULL },
975 { 0x7be8bee8d6e957e8ULL, 0x1b758d848fac54b0ULL },
976 { 0xfcba3253df211320ULL, 0x15f7a46a0c89dd59ULL },
977 { 0x63c8284318e74280ULL, 0x1192e9ee706e4aaeULL },
978 { 0x060d0d3827d86a66ULL, 0x1c1e43171a4a1117ULL },
979 { 0x6b3da42cecad21ebULL, 0x167e9c127b6e7412ULL },
980 { 0x88fe1cf0bd574e56ULL, 0x11fee341fc585cdbULL },
981 { 0x419694b462254a23ULL, 0x1ccb0536608d615fULL },
982 { 0x67abaa29e81dd4e9ULL, 0x1708d0f84d3de77fULL },
983 { 0xb95621bb2017dd87ULL, 0x126d73f9d764b932ULL },
984 { 0xc223692b668c95a5ULL, 0x1d7becc2f23ac1eaULL },
985 { 0xce82ba891ed6de1dULL, 0x179657025b6234bbULL },
986 { 0xa53562074bdf1818ULL, 0x12deac01e2b4f6fcULL },
987 { 0x3b889cd87964f359ULL, 0x1e3113363787f194ULL },
988 { 0xfc6d4a46c783f5e1ULL, 0x18274291c6065adcULL },
989 { 0x30576e9f06032b1aULL, 0x13529ba7d19eaf17ULL },
990 { 0x1a257dcb3cd1de90ULL, 0x1eea92a61c311825ULL },
991 { 0x481dfe3c30a7e540ULL, 0x18bba884e35a79b7ULL },
992 { 0xd34b31c9c0865100ULL, 0x13c9539d82aec7c5ULL },
993 { 0x5211e942cda3b4cdULL, 0x1fa885c8d117a609ULL },
994 { 0x74db21023e1c90a4ULL, 0x19539e3a40dfb807ULL },
995 { 0xf715b401cb4a0d50ULL, 0x1442e4fb67196005ULL },
996 { 0xf8de299b09080aa7ULL, 0x103583fc527ab337ULL },
997 { 0x8e304291a80cddd7ULL, 0x19ef3993b72ab859ULL },
998 { 0x3e8d020e200a4b13ULL, 0x14bf6142f8eef9e1ULL },
999 { 0x653d9b3e80083c0fULL, 0x10991a9bfa58c7e7ULL },
1000 { 0x6ec8f864000d2ce4ULL, 0x1a8e90f9908e0ca5ULL },
1001 { 0x8bd3f9e999a423eaULL, 0x153eda614071a3b7ULL },
1002 { 0x3ca994bae1501cbbULL, 0x10ff151a99f482f9ULL },
1003 { 0xc775bac49bb3612bULL, 0x1b31bb5dc320d18eULL },
1004 { 0xd2c4956a16291a89ULL, 0x15c162b168e70e0bULL },
1005 { 0xdbd0778811ba7ba1ULL, 0x11678227871f3e6fULL },
1006 { 0x2c80bf401c5d929bULL, 0x1bd8d03f3e9863e6ULL },
1007 { 0xbd33cc3349e47549ULL, 0x16470cff6546b651ULL },
1008 { 0xca8fd68f6e505dd4ULL, 0x11d270cc51055ea7ULL },
1009 { 0x4419574be3b3c953ULL, 0x1c83e7ad4e6efdd9ULL },
1010 { 0x0347790982f63aa9ULL, 0x16cfec8aa52597e1ULL },
1011 { 0xcf6c60d468c4fbbaULL, 0x123ff06eea847980ULL },
1012 { 0xe57a34870e07f92aULL, 0x1d331a4b10d3f59aULL },
1013 { 0x512e906c0b399422ULL, 0x175c1508da432ae2ULL },
1014 { 0xda8ba6bcd5c7a9b5ULL, 0x12b010d3e1cf5581ULL },
1015 { 0x90df712e22d90f87ULL, 0x1de6815302e5559cULL },
1016 { 0xda4c5a8b4f140c6cULL, 0x17eb9aa8cf1dde16ULL },
1017 { 0xaea37ba2a5a9a38aULL, 0x1322e220a5b17e78ULL },
1018 { 0x7dd25f6aa2a905a9ULL, 0x1e9e369aa2b59727ULL },
1019 { 0x97db7f888220d154ULL, 0x187e92154ef7ac1fULL },
1020 { 0x797c6606ce80a777ULL, 0x139874ddd8c6234cULL },
1021 { 0x8f2d700ae4010bf1ULL, 0x1f5a549627a36badULL },
1022 { 0x0c2459a25000d65aULL, 0x191510781fb5efbeULL },
1023 { 0x701d1481d99a4515ULL, 0x1410d9f9b2f7f2feULL },
1024 { 0xc017439b147b6a77ULL, 0x100d7b2e28c65bfeULL },
1025 { 0xccf205c4ed9243f2ULL, 0x19af2b7d0e0a2ccaULL },
1026 { 0x0a5b37d0be0e9cc2ULL, 0x148c22ca71a1bd6fULL },
1027 { 0x0848f973cb3ee3ceULL, 0x10701bd527b4978cULL },
1028 { 0xda0e5bec78649fb0ULL, 0x1a4cf9550c5425acULL },
1029 { 0x7b3eaff060507fc0ULL, 0x150a6110d6a9b7bdULL },
1030 { 0x95cbbff380406633ULL, 0x10d51a73deee2c97ULL },
1031 { 0xefac665266cd7052ULL, 0x1aee90b964b04758ULL },
1032 { 0x2623850eb8a459dbULL, 0x158ba6fab6f36c47ULL },
1033 { 0x1e82d0d893b6ae49ULL, 0x113c85955f29236cULL },
1034 { 0xfd9e1af41f8ab075ULL, 0x1b9408eefea838acULL },
1035 { 0x97b1af29b2d559f7ULL, 0x16100725988693bdULL },
1036 { 0xac8e25baf5777b2cULL, 0x11a66c1e139edc97ULL },
1037 { 0x7a7d092b2258c513ULL, 0x1c3d79c9b8fe2dbfULL },
1038 { 0x61fda0ef4ead6a76ULL, 0x169794a160cb57ccULL },
1039 { 0xe7fe1a590bbdeec5ULL, 0x1212dd4de7091309ULL },
1040 { 0xa6635d5b45fcb13aULL, 0x1ceafbafd80e84dcULL },
1041 { 0x851c4aaf6b308dc8ULL, 0x172262f3133ed0b0ULL },
1042 { 0xd0e36ef2bc26d7d4ULL, 0x1281e8c275cbda26ULL },
1043 { 0xb49f17eac6a48c86ULL, 0x1d9ca79d894629d7ULL },
1044 { 0x2a18dfef0550706bULL, 0x17b08617a104ee46ULL },
1045 { 0x54e0b3259dd9f389ULL, 0x12f39e794d9d8b6bULL },
1046 { 0x87cdeb6f62f65274ULL, 0x1e5297287c2f4578ULL },
1047 { 0xd30b22bf825ea85dULL, 0x18421286c9bf6ac6ULL },
1048 { 0x0f3c1bcc684bb9e4ULL, 0x13680ed23aff889fULL },
1049 { 0x18602c7a4079296dULL, 0x1f0ce4839198da98ULL },
1050 { 0x46b356c833942124ULL, 0x18d71d360e13e213ULL },
1051 { 0x388f78a029434db6ULL, 0x13df4a91a4dcb4dcULL },
1052 { 0x2d3f93b35435d7c5ULL, 0x0fe5d54150b090b0ULL },
1053 { 0x153285ebb9efbfa2ULL, 0x196fbb9bb44db44dULL },
1054 { 0xaa8ed189618c994eULL, 0x145962e2f6a4903dULL },
1055 { 0xeed8a7a11ad6e10cULL, 0x1047824f2bb6d9caULL },
1056 { 0x7e27729b5e249b45ULL, 0x1a0c03b1df8af611ULL },
1057 { 0xfe85f549181d4904ULL, 0x14d6695b193bf80dULL },
1058 { 0xcb9e5dd4134aa0d0ULL, 0x10ab877c142ff9a4ULL },
1059 { 0xdf63c9535211014dULL, 0x1aac0bf9b9e65c3aULL },
1060 { 0x191ca10f74da6771ULL, 0x15566ffafb1eb02fULL },
1061 { 0xadb080d92a4852c1ULL, 0x1111f32f2f4bc025ULL },
1062 { 0x15e7348eaa0d5134ULL, 0x1b4feb7eb212cd09ULL },
1063 { 0xab1f5d3eee710dc4ULL, 0x15d98932280f0a6dULL },
1064 { 0xbc1917658b8da49dULL, 0x117ad428200c0857ULL },
1065 { 0x2cf4f23c127c3a94ULL, 0x1bf7b9d9cce00d59ULL },
1066 { 0xf0c3f4fcdb969543ULL, 0x165fc7e170b33de0ULL },
1067 { 0x5a365d9716121103ULL, 0x11e6398126f5cb1aULL },
1068 { 0x9056fc24f01ce804ULL, 0x1ca38f350b22de90ULL },
1069 { 0xd9df301d8ce3ecd0ULL, 0x16e93f5da2824ba6ULL },
1070 { 0xe17f59b13d8323daULL, 0x125432b14ecea2ebULL },
1071 { 0x68cbc2b52f38395cULL, 0x1d53844ee47dd179ULL },
1072 { 0x53d6355dbf602de3ULL, 0x177603725064a794ULL },
1073 { 0xa9782ab165e68b1cULL, 0x12c4cf8ea6b6ec76ULL },
1074 { 0x0f26aab56fd744faULL, 0x1e07b27dd78b13f1ULL },
1075 { 0x3f52222abfdf6a62ULL, 0x18062864ac6f4327ULL },
1076 { 0x65db4e88997f884eULL, 0x1338205089f29c1fULL },
1077 { 0x6fc54a7428cc0d4aULL, 0x1ec033b40fea9365ULL },
1078 { 0x596aa1f68709a43bULL, 0x1899c2f673220f84ULL },
1079 { 0xadeee7f86c07b696ULL, 0x13ae3591f5b4d936ULL },
1080 { 0x497e3ff3e00c5756ULL, 0x1f7d228322baf524ULL },
1081 { 0xd464fff64cd6ac45ULL, 0x1930e868e89590e9ULL },
1082 { 0x4383fff83d7889d1ULL, 0x14272053ed4473eeULL },
1083 { 0xcf9cccc69793a174ULL, 0x101f4d0ff1038ff1ULL },
1084 { 0x7f6147a425b90252ULL, 0x19cbae7fe805b31cULL },
1085 { 0xcc4dd2e9b7c7350fULL, 0x14a2f1ffecd15c16ULL },
1086 { 0x3d0b0f215fd290d9ULL, 0x10825b3323dab012ULL },
1087 { 0x61ab4b689950e7c1ULL, 0x1a6a2b85062ab350ULL },
1088 { 0x4e22a2ba1440b967ULL, 0x1521bc6a6b555c40ULL },
1089 { 0x0b4ee894dd009453ULL, 0x10e7c9eebc4449cdULL },
1090 { 0x1217da87c800ed51ULL, 0x1b0c764ac6d3a948ULL },
1091 { 0xdb46486ca000bddaULL, 0x15a391d56bdc876cULL },
1092 { 0x490506bd4ccd64afULL, 0x114fa7ddefe39f8aULL },
1093 { 0xa8080ac87ae23ab1ULL, 0x1bb2a62fe638ff43ULL },
1094 { 0x5339a239fbe82ef4ULL, 0x162884f31e93ff69ULL },
1095 { 0x75c7b4fb2fecf25dULL, 0x11ba03f5b20fff87ULL },
1096 { 0x22d92191e647ea2eULL, 0x1c5cd322b67fff3fULL },
1097 { 0xb57a8141850654f2ULL, 0x16b0a8e891ffff65ULL },
1098 { 0xc4620101373843f5ULL, 0x1226ed86db3332b7ULL },
1099 { 0x3a366801f1f39feeULL, 0x1d0b15a491eb8459ULL },
1100 { 0xfb5eb99b27f6198bULL, 0x173c115074bc69e0ULL },
1101 { 0x2f7efae2865e7ad6ULL, 0x129674405d6387e7ULL },
1102 { 0xe597f7d0d6fd9156ULL, 0x1dbd86cd6238d971ULL },
1103 { 0x8479930d78cadaabULL, 0x17cad23de82d7ac1ULL },
1104 { 0xd06142712d6f1556ULL, 0x1308a831868ac89aULL },
1105 { 0x4d686a4eaf182222ULL, 0x1e74404f3daada91ULL },
1106 { 0xa453883ef279b4e8ULL, 0x185d003f6488aedaULL },
1107 { 0xe9dc6cff28615d87ULL, 0x137d99cc506d58aeULL },
1108 { 0xa960ae650d6895a4ULL, 0x1f2f5c7a1a488de4ULL },
1109 { 0xbab3beb73ded4483ULL, 0x18f2b061aea07183ULL },
1110 },
1111};
1112
1113}