Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(52)

Side by Side Diff: runtime/vm/bigint_operations_test.cc

Issue 509153003: New bigint implementation in the vm. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file.
4
5 #include "platform/assert.h"
6 #include "vm/bigint_operations.h"
7 #include "vm/object.h"
8 #include "vm/object_store.h"
9 #include "vm/unit_test.h"
10
11 namespace dart {
12
13 static uword ZoneAllocator(intptr_t size) {
14 Zone* zone = Isolate::Current()->current_zone();
15 return zone->AllocUnsafe(size);
16 }
17
18
19 TEST_CASE(BigintSmi) {
20 {
21 const Smi& smi = Smi::Handle(Smi::New(5));
22 const Bigint& bigint = Bigint::Handle(BigintOperations::NewFromSmi(smi));
23 EXPECT(BigintOperations::FitsIntoSmi(bigint));
24 const Smi& smi_back = Smi::Handle(BigintOperations::ToSmi(bigint));
25 EXPECT_EQ(5, smi_back.Value());
26 }
27
28 {
29 const Smi& smi = Smi::Handle(Smi::New(Smi::kMaxValue));
30 const Bigint& bigint = Bigint::Handle(BigintOperations::NewFromSmi(smi));
31 EXPECT(BigintOperations::FitsIntoSmi(bigint));
32 const Smi& smi_back = Smi::Handle(BigintOperations::ToSmi(bigint));
33 EXPECT(Smi::kMaxValue == smi_back.Value());
34 }
35
36 {
37 const Smi& smi = Smi::Handle(Smi::New(Smi::kMinValue));
38 const Bigint& bigint = Bigint::Handle(BigintOperations::NewFromSmi(smi));
39 EXPECT(BigintOperations::FitsIntoSmi(bigint));
40 const Smi& smi_back = Smi::Handle(BigintOperations::ToSmi(bigint));
41 EXPECT(bigint.IsNegative());
42 EXPECT(Smi::kMinValue == smi_back.Value());
43 }
44
45 {
46 ASSERT(0xFFFFFFF < Smi::kMaxValue);
47 const Smi& smi = Smi::Handle(Smi::New(0xFFFFFFF));
48 const Bigint& bigint = Bigint::Handle(BigintOperations::NewFromSmi(smi));
49 EXPECT(BigintOperations::FitsIntoSmi(bigint));
50 const Smi& smi_back = Smi::Handle(BigintOperations::ToSmi(bigint));
51 EXPECT(0xFFFFFFF == smi_back.Value());
52 }
53
54 {
55 ASSERT(0x10000000 < Smi::kMaxValue);
56 const Smi& smi = Smi::Handle(Smi::New(0x10000000));
57 const Bigint& bigint = Bigint::Handle(BigintOperations::NewFromSmi(smi));
58 EXPECT(BigintOperations::FitsIntoSmi(bigint));
59 const Smi& smi_back = Smi::Handle(BigintOperations::ToSmi(bigint));
60 EXPECT(0x10000000 == smi_back.Value());
61 }
62 }
63
64
65 TEST_CASE(BigintInt64) {
66 const int64_t kValue = 100000000;
67 const int64_t kValue64 = kValue * kValue;
68 Bigint& big = Bigint::Handle(BigintOperations::NewFromInt64(kValue));
69 const Smi& smi = Smi::Handle(Smi::New(kValue));
70 Bigint& big_test = Bigint::Handle(BigintOperations::NewFromSmi(smi));
71 EXPECT_EQ(0, BigintOperations::Compare(big, big_test));
72 big = BigintOperations::NewFromInt64(kValue64);
73 big_test = BigintOperations::Multiply(big_test, big_test);
74 EXPECT_EQ(0, BigintOperations::Compare(big, big_test));
75 big = BigintOperations::NewFromInt64(-kValue64);
76 big_test = BigintOperations::Subtract(
77 Bigint::Handle(BigintOperations::NewFromInt64(0)), big_test);
78 EXPECT_EQ(0, BigintOperations::Compare(big, big_test));
79
80 const Bigint& one = Bigint::Handle(BigintOperations::NewFromInt64(1));
81 big = BigintOperations::NewFromInt64(kMinInt64);
82 EXPECT(BigintOperations::FitsIntoInt64(big));
83 int64_t back = BigintOperations::ToInt64(big);
84 EXPECT_EQ(kMinInt64, back);
85
86 big = BigintOperations::Subtract(big, one);
87 EXPECT(!BigintOperations::FitsIntoInt64(big));
88
89 big = BigintOperations::NewFromInt64(kMaxInt64);
90 EXPECT(BigintOperations::FitsIntoInt64(big));
91 back = BigintOperations::ToInt64(big);
92 EXPECT_EQ(kMaxInt64, back);
93
94 big = BigintOperations::Add(big, one);
95 EXPECT(!BigintOperations::FitsIntoInt64(big));
96 }
97
98
99 TEST_CASE(BigintUint64) {
100 const Bigint& one = Bigint::Handle(BigintOperations::NewFromUint64(1));
101 EXPECT(BigintOperations::FitsIntoInt64(one));
102 EXPECT(BigintOperations::FitsIntoUint64(one));
103
104 Bigint& big = Bigint::Handle(BigintOperations::NewFromUint64(kMaxUint64));
105 EXPECT(!BigintOperations::FitsIntoInt64(big));
106 EXPECT(BigintOperations::FitsIntoUint64(big));
107
108 uint64_t back = BigintOperations::ToUint64(big);
109 EXPECT_EQ(kMaxUint64, back);
110
111 big = BigintOperations::Add(big, one);
112 EXPECT(!BigintOperations::FitsIntoInt64(big));
113 EXPECT(!BigintOperations::FitsIntoUint64(big));
114
115 big = BigintOperations::Subtract(big, one);
116 EXPECT(!BigintOperations::FitsIntoInt64(big));
117 EXPECT(BigintOperations::FitsIntoUint64(big));
118
119 big = BigintOperations::ShiftRight(big, 1);
120 EXPECT(BigintOperations::FitsIntoInt64(big));
121 EXPECT(BigintOperations::FitsIntoUint64(big));
122 }
123
124
125 TEST_CASE(BigintDouble) {
126 Smi& smi = Smi::Handle(Smi::New(5));
127 Bigint& bigint = Bigint::Handle(BigintOperations::NewFromSmi(smi));
128 Double& dbl = Double::Handle(BigintOperations::ToDouble(bigint));
129 EXPECT_EQ(5.0, dbl.value());
130
131 smi = Smi::New(0);
132 bigint = BigintOperations::NewFromSmi(smi);
133 dbl = BigintOperations::ToDouble(bigint);
134 EXPECT_EQ(0.0, dbl.value());
135 double zero = dbl.value();
136
137 smi = Smi::New(-12345678);
138 bigint = BigintOperations::NewFromSmi(smi);
139 dbl = BigintOperations::ToDouble(bigint);
140 EXPECT_EQ(-1.2345678e+7, dbl.value());
141
142 bigint = BigintOperations::NewFromCString("1");
143 dbl = BigintOperations::ToDouble(bigint);
144 EXPECT_EQ(1.0, dbl.value());
145
146 bigint = BigintOperations::NewFromCString("123456");
147 dbl = BigintOperations::ToDouble(bigint);
148 EXPECT_EQ(123456.0, dbl.value());
149
150 bigint = BigintOperations::NewFromCString("123456789");
151 dbl = BigintOperations::ToDouble(bigint);
152 EXPECT_EQ(123456789.0, dbl.value());
153
154 bigint = BigintOperations::NewFromCString("12345678901234567");
155 dbl = BigintOperations::ToDouble(bigint);
156 EXPECT_EQ(12345678901234568.0, dbl.value());
157
158 bigint = BigintOperations::NewFromCString("98765432109876");
159 dbl = BigintOperations::ToDouble(bigint);
160 EXPECT_EQ(9.8765432109876e+13, dbl.value());
161
162 bigint = BigintOperations::NewFromCString("0x17777777777778");
163 dbl = BigintOperations::ToDouble(bigint);
164 EXPECT_EQ(6605279453476728.0, dbl.value());
165
166 bigint = BigintOperations::NewFromCString("0x37777777777778");
167 dbl = BigintOperations::ToDouble(bigint);
168 EXPECT_EQ(15612478708217720.0, dbl.value());
169
170 bigint = BigintOperations::NewFromCString("0x177777777777781234567");
171 dbl = BigintOperations::ToDouble(bigint);
172 EXPECT_EQ(1.7730912021014563e+24, dbl.value());
173
174 bigint = BigintOperations::NewFromCString("0x177777777777788000000");
175 dbl = BigintOperations::ToDouble(bigint);
176 EXPECT_EQ(1.7730912021014563e+24, dbl.value());
177
178 bigint = BigintOperations::NewFromCString("0x177777777777788000001");
179 dbl = BigintOperations::ToDouble(bigint);
180 EXPECT_EQ(1.7730912021014565e+24, dbl.value());
181
182 bigint = BigintOperations::NewFromCString("0x177777777777798000000");
183 dbl = BigintOperations::ToDouble(bigint);
184 EXPECT_EQ(1.7730912021014568e+24, dbl.value());
185
186 bigint = BigintOperations::NewFromCString("0x177777777777798000001");
187 dbl = BigintOperations::ToDouble(bigint);
188 EXPECT_EQ(1.7730912021014568e+24, dbl.value());
189
190 bigint = BigintOperations::NewFromCString("0x377777777777790000000");
191 dbl = BigintOperations::ToDouble(bigint);
192 EXPECT_EQ(4.1909428413307146e+24, dbl.value());
193
194 bigint = BigintOperations::NewFromCString("0x377777777777790000001");
195 dbl = BigintOperations::ToDouble(bigint);
196 EXPECT_EQ(4.190942841330715e+24, dbl.value());
197
198 bigint = BigintOperations::NewFromCString("0x377777777777730000000");
199 dbl = BigintOperations::ToDouble(bigint);
200 EXPECT_EQ(4.1909428413307135e+24, dbl.value());
201
202 bigint = BigintOperations::NewFromCString("0x377777777777730000001");
203 dbl = BigintOperations::ToDouble(bigint);
204 EXPECT_EQ(4.1909428413307135e+24, dbl.value());
205
206 // Reduced precision.
207 bigint = BigintOperations::NewFromCString(
208 "9876543210987654321098765432109876543210");
209 dbl = BigintOperations::ToDouble(bigint);
210 EXPECT_EQ(9.8765432109876546e+39, dbl.value());
211
212 bigint = BigintOperations::NewFromCString(
213 "12345678901234567890123456789012345678901234567890"
214 "12345678901234567890123456789012345678901234567890"
215 "12345678901234567890123456789012345678901234567890"
216 "12345678901234567890123456789012345678901234567890"
217 "12345678901234567890123456789012345678901234567890"
218 "12345678901234567890123456789012345678901234567890"
219 "12345678901234567890123456789012345678901234567890"
220 "12345678901234567890123456789012345678901234567890"
221 "12345678901234567890123456789012345678901234567890"
222 "12345678901234567890123456789012345678901234567890");
223 dbl = BigintOperations::ToDouble(bigint);
224 EXPECT_EQ(1.0/zero, dbl.value());
225
226 bigint = BigintOperations::NewFromCString(
227 "17976931348623157081452742373170435679807056752584"
228 "49965989174768031572607800285387605895586327668781"
229 "71540458953514382464234321326889464182768467546703"
230 "53751698604991057655128207624549009038932894407586"
231 "85084551339423045832369032229481658085593321233482"
232 "74797826204144723168738177180919299881250404026184"
233 "124858368");
234 dbl = BigintOperations::ToDouble(bigint);
235 EXPECT_EQ(1.7976931348623157e308, dbl.value());
236
237 bigint = BigintOperations::NewFromCString(
238 "17976931348623159077293051907890247336179769789423"
239 "06572734300811577326758055009631327084773224075360"
240 "21120113879871393357658789768814416622492847430639"
241 "47412437776789342486548527630221960124609411945308"
242 "29520850057688381506823424628814739131105408272371"
243 "63350510684586298239947245938479716304835356329624"
244 "224137216");
245 dbl = BigintOperations::ToDouble(bigint);
246 EXPECT_EQ(1.0/zero, dbl.value());
247
248 bigint = BigintOperations::NewFromCString(
249 "17976931348623158079372897140530341507993413271003"
250 "78269361737789804449682927647509466490179775872070"
251 "96330286416692887910946555547851940402630657488671"
252 "50582068190890200070838367627385484581771153176447"
253 "57302700698555713669596228429148198608349364752927"
254 "19074168444365510704342711559699508093042880177904"
255 "174497792");
256 dbl = BigintOperations::ToDouble(bigint);
257 EXPECT_EQ(1.0/zero, dbl.value());
258
259 bigint = BigintOperations::NewFromCString(
260 "17976931348623158079372897140530341507993413271003"
261 "78269361737789804449682927647509466490179775872070"
262 "96330286416692887910946555547851940402630657488671"
263 "50582068190890200070838367627385484581771153176447"
264 "57302700698555713669596228429148198608349364752927"
265 "19074168444365510704342711559699508093042880177904"
266 "174497791");
267 dbl = BigintOperations::ToDouble(bigint);
268 EXPECT_EQ(1.7976931348623157e308, dbl.value());
269
270 bigint = BigintOperations::NewFromCString("100000000000000000000000");
271 dbl = BigintOperations::ToDouble(bigint);
272 EXPECT_EQ(1e+23, dbl.value());
273
274 bigint = BigintOperations::NewFromCString("100000000000000000000001");
275 dbl = BigintOperations::ToDouble(bigint);
276 EXPECT_EQ(1.0000000000000001e+23, dbl.value());
277
278 // Same but shifted 64 bits to the left.
279 bigint = BigintOperations::NewFromCString(
280 "1844674407370955161600000000000000000000000");
281 dbl = BigintOperations::ToDouble(bigint);
282 EXPECT_EQ(1.844674407370955e+42, dbl.value());
283
284 bigint = BigintOperations::NewFromCString(
285 "1844674407370955161600000000000000000000001");
286 dbl = BigintOperations::ToDouble(bigint);
287 EXPECT_EQ(1.8446744073709553e+42, dbl.value());
288 }
289
290
291 TEST_CASE(BigintHexStrings) {
292 {
293 const Bigint& bigint = Bigint::Handle(
294 BigintOperations::NewFromCString("0x0"));
295 EXPECT(BigintOperations::FitsIntoSmi(bigint));
296 const Smi& smi = Smi::Handle(BigintOperations::ToSmi(bigint));
297 EXPECT_EQ(0, smi.Value());
298 }
299
300 {
301 const Bigint& bigint = Bigint::Handle(
302 BigintOperations::NewFromCString("0x1"));
303 EXPECT(BigintOperations::FitsIntoSmi(bigint));
304 const Smi& smi = Smi::Handle(BigintOperations::ToSmi(bigint));
305 EXPECT_EQ(1, smi.Value());
306 }
307
308 {
309 const Bigint& bigint = Bigint::Handle(
310 BigintOperations::NewFromCString("0x123"));
311 EXPECT(BigintOperations::FitsIntoSmi(bigint));
312 const Smi& smi = Smi::Handle(BigintOperations::ToSmi(bigint));
313 EXPECT_EQ(0x123, smi.Value());
314 }
315
316 {
317 const Bigint& bigint = Bigint::Handle(
318 BigintOperations::NewFromCString("0x123"));
319 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
320 EXPECT_STREQ("0x123", str);
321 }
322
323 {
324 const Bigint& bigint = Bigint::Handle(
325 BigintOperations::NewFromCString("0xaBcEf"));
326 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
327 EXPECT_STREQ("0xABCEF", str);
328 }
329
330 {
331 const char* in = "0x123456789";
332 const Bigint& bigint = Bigint::Handle(
333 BigintOperations::NewFromCString(in));
334 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
335 EXPECT_STREQ(in, str);
336 }
337
338 {
339 const char* in = "0xFFFFFFF";
340 const Bigint& bigint = Bigint::Handle(
341 BigintOperations::NewFromCString(in));
342 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
343 EXPECT_STREQ(in, str);
344 }
345
346 {
347 const char* in = "0x10000000";
348 const Bigint& bigint = Bigint::Handle(
349 BigintOperations::NewFromCString(in));
350 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
351 EXPECT_STREQ(in, str);
352 }
353
354 {
355 const char* in = "0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0";
356 const Bigint& bigint = Bigint::Handle(BigintOperations::NewFromCString(in));
357 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
358 EXPECT_STREQ(in, str);
359 }
360
361 {
362 const Bigint& bigint = Bigint::Handle(
363 BigintOperations::NewFromCString("-0x123"));
364 EXPECT(BigintOperations::FitsIntoSmi(bigint));
365 const Smi& smi = Smi::Handle(BigintOperations::ToSmi(bigint));
366 EXPECT_EQ(-0x123, smi.Value());
367 }
368
369 {
370 const Bigint& bigint = Bigint::Handle(
371 BigintOperations::NewFromCString("-0x123"));
372 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
373 EXPECT_STREQ("-0x123", str);
374 }
375
376 {
377 const Bigint& bigint = Bigint::Handle(
378 BigintOperations::NewFromCString("-0xaBcEf"));
379 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
380 EXPECT_STREQ("-0xABCEF", str);
381 }
382
383 {
384 const char* in = "-0x123456789";
385 const Bigint& bigint = Bigint::Handle(BigintOperations::NewFromCString(in));
386 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
387 EXPECT_STREQ(in, str);
388 }
389
390 {
391 const char* in = "-0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0";
392 const Bigint& bigint = Bigint::Handle(BigintOperations::NewFromCString(in));
393 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
394 EXPECT_STREQ(in, str);
395 }
396
397 {
398 const Bigint& bigint = Bigint::Handle(
399 BigintOperations::NewFromCString("0x00000123"));
400 EXPECT(BigintOperations::FitsIntoSmi(bigint));
401 const Smi& smi = Smi::Handle(BigintOperations::ToSmi(bigint));
402 EXPECT_EQ(0x123, smi.Value());
403 }
404
405 {
406 const Bigint& bigint = Bigint::Handle(
407 BigintOperations::NewFromCString("0x000000123"));
408 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
409 EXPECT_STREQ("0x123", str);
410 }
411
412 {
413 const Bigint& bigint = Bigint::Handle(
414 BigintOperations::NewFromCString("0x0000aBcEf"));
415 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
416 EXPECT_STREQ("0xABCEF", str);
417 }
418
419 {
420 const char* in = "0x00000000000000000000000000000000000000000000123456789";
421 const char* out = "0x123456789";
422 const Bigint& bigint = Bigint::Handle(BigintOperations::NewFromCString(in));
423 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
424 EXPECT_STREQ(out, str);
425 }
426
427 {
428 const char* in = "0x00000123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0";
429 const char* out = "0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0";
430 const Bigint& bigint = Bigint::Handle(BigintOperations::NewFromCString(in));
431 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
432 EXPECT_STREQ(out, str);
433 }
434
435 {
436 const Bigint& bigint = Bigint::Handle(
437 BigintOperations::NewFromCString("-0x00000123"));
438 EXPECT(BigintOperations::FitsIntoSmi(bigint));
439 const Smi& smi = Smi::Handle(BigintOperations::ToSmi(bigint));
440 EXPECT_EQ(-0x123, smi.Value());
441 }
442
443 {
444 const Bigint& bigint = Bigint::Handle(
445 BigintOperations::NewFromCString("-0x00000123"));
446 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
447 EXPECT_STREQ("-0x123", str);
448 }
449
450 {
451 const Bigint& bigint = Bigint::Handle(
452 BigintOperations::NewFromCString("-0x000aBcEf"));
453 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
454 EXPECT_STREQ("-0xABCEF", str);
455 }
456
457 {
458 const char* in = "-0x00000000000000000000000000000000000000000000123456789";
459 const char* out = "-0x123456789";
460 const Bigint& bigint = Bigint::Handle(BigintOperations::NewFromCString(in));
461 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
462 EXPECT_STREQ(out, str);
463 }
464
465 {
466 const char* in = "-0x0000123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0";
467 const char* out = "-0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0";
468 const Bigint& bigint = Bigint::Handle(BigintOperations::NewFromCString(in));
469 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
470 EXPECT_STREQ(out, str);
471 }
472 {
473 const char* test = "12345678901234567890";
474 const char* out = "0xAB54A98CEB1F0AD2";
475 const Bigint& bigint = Bigint::Handle(
476 BigintOperations::NewFromCString(test));
477 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
478 EXPECT_STREQ(out, str);
479 }
480 {
481 const char* test = "-12345678901234567890";
482 const char* out = "-0xAB54A98CEB1F0AD2";
483 const Bigint& bigint = Bigint::Handle(
484 BigintOperations::NewFromCString(test));
485 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
486 EXPECT_STREQ(out, str);
487 }
488 }
489
490
491 TEST_CASE(BigintDecStrings) {
492 {
493 const Bigint& bigint = Bigint::Handle(
494 BigintOperations::NewFromCString("0x0"));
495 const char* str =
496 BigintOperations::ToDecimalCString(bigint, &ZoneAllocator);
497 EXPECT_STREQ("0", str);
498 }
499
500 {
501 const Bigint& bigint = Bigint::Handle(
502 BigintOperations::NewFromCString("0x123"));
503 const char* str =
504 BigintOperations::ToDecimalCString(bigint, &ZoneAllocator);
505 EXPECT_STREQ("291", str);
506 }
507
508 {
509 const Bigint& bigint = Bigint::Handle(
510 BigintOperations::NewFromCString("0xaBcEf"));
511 const char* str =
512 BigintOperations::ToDecimalCString(bigint, &ZoneAllocator);
513 EXPECT_STREQ("703727", str);
514 }
515
516 {
517 const char* in = "0x123456789";
518 const Bigint& bigint = Bigint::Handle(
519 BigintOperations::NewFromCString(in));
520 const char* str =
521 BigintOperations::ToDecimalCString(bigint, &ZoneAllocator);
522 EXPECT_STREQ("4886718345", str);
523 }
524
525 {
526 const char* in = "0xFFFFFFF";
527 const Bigint& bigint = Bigint::Handle(
528 BigintOperations::NewFromCString(in));
529 const char* str =
530 BigintOperations::ToDecimalCString(bigint, &ZoneAllocator);
531 EXPECT_STREQ("268435455", str);
532 }
533
534 {
535 const char* in = "0x10000000";
536 const Bigint& bigint = Bigint::Handle(
537 BigintOperations::NewFromCString(in));
538 const char* str =
539 BigintOperations::ToDecimalCString(bigint, &ZoneAllocator);
540 EXPECT_STREQ("268435456", str);
541 }
542
543 {
544 const char* in = "0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0";
545 const Bigint& bigint = Bigint::Handle(BigintOperations::NewFromCString(in));
546 const char* str =
547 BigintOperations::ToDecimalCString(bigint, &ZoneAllocator);
548 EXPECT_STREQ("7141946863373290020600059860922167424469804758405880798960",
549 str);
550 }
551
552 {
553 const Bigint& bigint = Bigint::Handle(
554 BigintOperations::NewFromCString("-0x123"));
555 EXPECT(BigintOperations::FitsIntoSmi(bigint));
556 const Smi& smi = Smi::Handle(BigintOperations::ToSmi(bigint));
557 EXPECT_EQ(-291, smi.Value());
558 }
559
560 {
561 const Bigint& bigint = Bigint::Handle(
562 BigintOperations::NewFromCString("-0x123"));
563 const char* str =
564 BigintOperations::ToDecimalCString(bigint, &ZoneAllocator);
565 EXPECT_STREQ("-291", str);
566 }
567
568 {
569 const Bigint& bigint = Bigint::Handle(
570 BigintOperations::NewFromCString("-0xaBcEf"));
571 const char* str =
572 BigintOperations::ToDecimalCString(bigint, &ZoneAllocator);
573 EXPECT_STREQ("-703727", str);
574 }
575
576 {
577 const char* in = "-0x123456789";
578 const Bigint& bigint = Bigint::Handle(BigintOperations::NewFromCString(in));
579 const char* str =
580 BigintOperations::ToDecimalCString(bigint, &ZoneAllocator);
581 EXPECT_STREQ("-4886718345", str);
582 }
583
584 {
585 const char* in = "-0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0";
586 const Bigint& bigint = Bigint::Handle(BigintOperations::NewFromCString(in));
587 const char* str =
588 BigintOperations::ToDecimalCString(bigint, &ZoneAllocator);
589 EXPECT_STREQ("-7141946863373290020600059860922167424469804758405880798960",
590 str);
591 }
592
593 {
594 const Bigint& bigint = Bigint::Handle(
595 BigintOperations::NewFromCString("0x00000123"));
596 EXPECT(BigintOperations::FitsIntoSmi(bigint));
597 const Smi& smi = Smi::Handle(BigintOperations::ToSmi(bigint));
598 EXPECT_EQ(0x123, smi.Value());
599 }
600
601 {
602 const Bigint& bigint = Bigint::Handle(
603 BigintOperations::NewFromCString("0x000000123"));
604 const char* str =
605 BigintOperations::ToDecimalCString(bigint, &ZoneAllocator);
606 EXPECT_STREQ("291", str);
607 }
608
609 {
610 const Bigint& bigint = Bigint::Handle(
611 BigintOperations::NewFromCString("100000000000000000000000000000000"));
612 const char* str =
613 BigintOperations::ToDecimalCString(bigint, &ZoneAllocator);
614 EXPECT_STREQ("100000000000000000000000000000000", str);
615 }
616 }
617
618
619 static void TestBigintCompare(const char* a, const char* b, int compare) {
620 const Bigint& bigint_a = Bigint::Handle(BigintOperations::NewFromCString(a));
621 const Bigint& bigint_b = Bigint::Handle(BigintOperations::NewFromCString(b));
622 int computed_compare = BigintOperations::Compare(bigint_a, bigint_b);
623 int inverted_compare = BigintOperations::Compare(bigint_b, bigint_a);
624 if (compare == 0) {
625 EXPECT(computed_compare == 0);
626 EXPECT(inverted_compare == 0);
627 } else if (compare < 0) {
628 ASSERT(computed_compare < 0);
629 EXPECT(computed_compare < 0);
630 EXPECT(inverted_compare > 0);
631 } else {
632 ASSERT(compare > 0);
633 EXPECT(computed_compare > 0);
634 EXPECT(inverted_compare < 0);
635 }
636 }
637
638
639 TEST_CASE(BigintCompare) {
640 TestBigintCompare("0x0", "0x0", 0);
641 TestBigintCompare("0x1", "0x1", 0);
642 TestBigintCompare("-0x1", "-0x1", 0);
643 TestBigintCompare("0x1234567", "0x1234567", 0);
644 TestBigintCompare("-0x1234567", "-0x1234567", 0);
645 TestBigintCompare("0x12345678", "0x12345678", 0);
646 TestBigintCompare("-0x12345678", "-0x12345678", 0);
647 TestBigintCompare("0x123456789ABCDEF0", "0x123456789ABCDEF0", 0);
648 TestBigintCompare("-0x123456789ABCDEF0", "-0x123456789ABCDEF0", 0);
649 TestBigintCompare("0x123456789ABCDEF01", "0x123456789ABCDEF01", 0);
650 TestBigintCompare("-0x123456789ABCDEF01", "-0x123456789ABCDEF01", 0);
651 TestBigintCompare("0x1", "0x0", 1);
652 TestBigintCompare("-0x1", "-0x2", 1);
653 TestBigintCompare("0x1234567", "0x1234566", 1);
654 TestBigintCompare("-0x1234567", "-0x1234568", 1);
655 TestBigintCompare("0x12345678", "0x12345677", 1);
656 TestBigintCompare("-0x12345678", "-0x12345679", 1);
657 TestBigintCompare("0x123456789ABCDEF1", "0x123456789ABCDEF0", 1);
658 TestBigintCompare("-0x123456789ABCDEF0", "-0x123456789ABCDEF1", 1);
659 TestBigintCompare("0x123456789ABCDEF02", "0x123456789ABCDEF01", 1);
660 TestBigintCompare("-0x123456789ABCDEF00", "-0x123456789ABCDEF01", 1);
661 TestBigintCompare("0x10000000", "0xFFFFFFF", 1);
662 TestBigintCompare("-0x10000000", "-0xFFFFFFF", -1);
663 TestBigintCompare("0x100000000", "0xFFFFFFFF", 1);
664 TestBigintCompare("-0x100000000", "-0xFFFFFFFF", -1);
665 TestBigintCompare("0x10000000000000000", "0xFFFFFFFFFFFFFFFF", 1);
666 TestBigintCompare("-0x10000000000000000", "-0xFFFFFFFFFFFFFFFF", -1);
667 TestBigintCompare("0x10000000000000000", "0x0", 1);
668 TestBigintCompare("-0x10000000000000000", "0x0", -1);
669 TestBigintCompare("-0x1234567", "0x1234566", -1);
670 TestBigintCompare("-0x1234567", "0x1234568", -1);
671 TestBigintCompare("-0x12345678", "0x12345677", -1);
672 TestBigintCompare("-0x12345678", "0x12345670", -1);
673 TestBigintCompare("-0x123456789ABCDEF1", "0x123456789ABCDEF0", -1);
674 TestBigintCompare("-0x123456789ABCDEF0", "0x123456789ABCDEF1", -1);
675 TestBigintCompare("-0x123456789ABCDEF02", "0x123456789ABCDEF01", -1);
676 TestBigintCompare("-0x123456789ABCDEF00", "0x123456789ABCDEF01", -1);
677 TestBigintCompare("-0x10000000", "0xFFFFFFF", -1);
678 TestBigintCompare("-0x10000000", "0xFFFFFFF", -1);
679 TestBigintCompare("-0x100000000", "0xFFFFFFFF", -1);
680 TestBigintCompare("-0x100000000", "0xFFFFFFFF", -1);
681 TestBigintCompare("-0x10000000000000000", "0xFFFFFFFFFFFFFFFF", -1);
682 TestBigintCompare("-0x10000000000000000", "0xFFFFFFFFFFFFFFFF", -1);
683 TestBigintCompare("-0x10000000000000000", "0x0", -1);
684 TestBigintCompare("-0x10000000000000000", "0x0", -1);
685 }
686
687
688 TEST_CASE(BigintDecimalStrings) {
689 {
690 const Bigint& bigint = Bigint::Handle(
691 BigintOperations::NewFromCString("0"));
692 EXPECT(BigintOperations::FitsIntoSmi(bigint));
693 const Smi& smi = Smi::Handle(BigintOperations::ToSmi(bigint));
694 EXPECT_EQ(0, smi.Value());
695 }
696
697 {
698 const Bigint& bigint = Bigint::Handle(
699 BigintOperations::NewFromCString("1"));
700 EXPECT(BigintOperations::FitsIntoSmi(bigint));
701 const Smi& smi = Smi::Handle(BigintOperations::ToSmi(bigint));
702 EXPECT_EQ(1, smi.Value());
703 }
704
705 {
706 const Bigint& bigint = Bigint::Handle(
707 BigintOperations::NewFromCString("703710"));
708 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
709 EXPECT_STREQ("0xABCDE", str);
710 }
711
712 {
713 const Bigint& bigint = Bigint::Handle(
714 BigintOperations::NewFromCString("11259375"));
715 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
716 EXPECT_STREQ("0xABCDEF", str);
717 }
718
719 {
720 const Bigint& bigint =
721 Bigint::Handle(BigintOperations::NewFromCString("1311768467463790320"));
722 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
723 EXPECT_STREQ("0x123456789ABCDEF0", str);
724 }
725
726 {
727 const Bigint& bigint = Bigint::Handle(
728 BigintOperations::NewFromCString("-0"));
729 EXPECT(BigintOperations::FitsIntoSmi(bigint));
730 const Smi& smi = Smi::Handle(BigintOperations::ToSmi(bigint));
731 EXPECT_EQ(0, smi.Value());
732 }
733
734 {
735 const Bigint& bigint = Bigint::Handle(
736 BigintOperations::NewFromCString("-1"));
737 EXPECT(BigintOperations::FitsIntoSmi(bigint));
738 const Smi& smi = Smi::Handle(BigintOperations::ToSmi(bigint));
739 EXPECT_EQ(-1, smi.Value());
740 }
741
742 {
743 const Bigint& bigint = Bigint::Handle(
744 BigintOperations::NewFromCString("-703710"));
745 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
746 EXPECT_STREQ("-0xABCDE", str);
747 }
748
749 {
750 const Bigint& bigint = Bigint::Handle(
751 BigintOperations::NewFromCString("-11259375"));
752 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
753 EXPECT_STREQ("-0xABCDEF", str);
754 }
755
756 {
757 const Bigint& bigint = Bigint::Handle(
758 BigintOperations::NewFromCString("-1311768467463790320"));
759 const char* str = BigintOperations::ToHexCString(bigint, &ZoneAllocator);
760 EXPECT_STREQ("-0x123456789ABCDEF0", str);
761 }
762 }
763
764
765 static void TestBigintAddSubtract(const char* a,
766 const char* b,
767 const char* sum) {
768 const Bigint& bigint_a = Bigint::Handle(BigintOperations::NewFromCString(a));
769 const Bigint& bigint_b = Bigint::Handle(BigintOperations::NewFromCString(b));
770 const Bigint& bigint_sum =
771 Bigint::Handle(BigintOperations::NewFromCString(sum));
772 const Bigint& computed_sum =
773 Bigint::Handle(BigintOperations::Add(bigint_a, bigint_b));
774 const Bigint& computed_difference1 =
775 Bigint::Handle(BigintOperations::Subtract(bigint_sum, bigint_a));
776 const Bigint& computed_difference2 =
777 Bigint::Handle(BigintOperations::Subtract(bigint_sum, bigint_b));
778 const char* str_sum = BigintOperations::ToHexCString(computed_sum,
779 &ZoneAllocator);
780 EXPECT_STREQ(sum, str_sum);
781 const char* str_difference1 =
782 BigintOperations::ToHexCString(computed_difference1, &ZoneAllocator);
783 EXPECT_STREQ(b, str_difference1);
784 const char* str_difference2 =
785 BigintOperations::ToHexCString(computed_difference2, &ZoneAllocator);
786 EXPECT_STREQ(a, str_difference2);
787 }
788
789
790 TEST_CASE(BigintAddSubtract) {
791 const char* zero = "0x0";
792 const char* one = "0x1";
793 const char* minus_one = "-0x1";
794
795 TestBigintAddSubtract(zero, zero, zero);
796 TestBigintAddSubtract(zero, one, one);
797 TestBigintAddSubtract(one, zero, one);
798 TestBigintAddSubtract(one, one, "0x2");
799 TestBigintAddSubtract(minus_one, minus_one, "-0x2");
800 TestBigintAddSubtract("0x123", zero, "0x123");
801 TestBigintAddSubtract(zero, "0x123", "0x123");
802 TestBigintAddSubtract("0x123", one, "0x124");
803 TestBigintAddSubtract(one, "0x123", "0x124");
804 TestBigintAddSubtract("0xFFFFFFF", one, // 28 bit overflow.
805 "0x10000000");
806 TestBigintAddSubtract("0xFFFFFFFF", one, // 32 bit overflow.
807 "0x100000000");
808 TestBigintAddSubtract("0xFFFFFFFFFFFFFF", one, // 56 bit overflow.
809 "0x100000000000000");
810 TestBigintAddSubtract("0xFFFFFFFFFFFFFFFF", one, // 64 bit overflow.
811 "0x10000000000000000");
812 TestBigintAddSubtract("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", // 128 bit.
813 one,
814 "0x100000000000000000000000000000000");
815 TestBigintAddSubtract("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
816 one,
817 "0x10000000000000000000000000000000000000000000");
818 TestBigintAddSubtract("0x8000000", // 28 bit overflow.
819 "0x8000000",
820 "0x10000000");
821 TestBigintAddSubtract("0x80000000", // 32 bit overflow.
822 "0x80000000",
823 "0x100000000");
824 TestBigintAddSubtract("0x80000000000000", // 56 bit overflow.
825 "0x80000000000000",
826 "0x100000000000000");
827 TestBigintAddSubtract("0x8000000000000000", // 64 bit overflow.
828 "0x8000000000000000",
829 "0x10000000000000000");
830 TestBigintAddSubtract("0x80000000000000000000000000000000", // 128 bit.
831 "0x80000000000000000000000000000000",
832 "0x100000000000000000000000000000000");
833 TestBigintAddSubtract("0x8000000000000000000000000000000000000000000",
834 "0x8000000000000000000000000000000000000000000",
835 "0x10000000000000000000000000000000000000000000");
836
837 {
838 const char* a = "0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0";
839 const char* sum1 = "0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF1";
840 const char* times2 = "0x2468ACF13579BDE02468ACF121579BDE02468ACF13579BDE0";
841 TestBigintAddSubtract(a, zero, a);
842 TestBigintAddSubtract(a, one, sum1);
843 TestBigintAddSubtract(a, a, times2);
844 }
845
846 TestBigintAddSubtract("-0x123", minus_one, "-0x124");
847 TestBigintAddSubtract(minus_one, "-0x123", "-0x124");
848 TestBigintAddSubtract("-0xFFFFFFF", minus_one, // 28 bit overflow.
849 "-0x10000000");
850 TestBigintAddSubtract("-0xFFFFFFFF", minus_one, // 32 bit overflow.
851 "-0x100000000");
852 TestBigintAddSubtract("-0xFFFFFFFFFFFFFF", minus_one, // 56 bit overflow.
853 "-0x100000000000000");
854 TestBigintAddSubtract("-0xFFFFFFFFFFFFFFFF", minus_one, // 64 bit overflow.
855 "-0x10000000000000000");
856 TestBigintAddSubtract("-0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", // 128 bit.
857 minus_one,
858 "-0x100000000000000000000000000000000");
859 TestBigintAddSubtract("-0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
860 minus_one,
861 "-0x10000000000000000000000000000000000000000000");
862 TestBigintAddSubtract("-0x8000000", // 28 bit overflow.
863 "-0x8000000",
864 "-0x10000000");
865 TestBigintAddSubtract("-0x80000000", // 32 bit overflow.
866 "-0x80000000",
867 "-0x100000000");
868 TestBigintAddSubtract("-0x80000000000000", // 56 bit overflow.
869 "-0x80000000000000",
870 "-0x100000000000000");
871 TestBigintAddSubtract("-0x8000000000000000", // 64 bit overflow.
872 "-0x8000000000000000",
873 "-0x10000000000000000");
874 TestBigintAddSubtract("-0x80000000000000000000000000000000", // 128 bit.
875 "-0x80000000000000000000000000000000",
876 "-0x100000000000000000000000000000000");
877 TestBigintAddSubtract("-0x8000000000000000000000000000000000000000000",
878 "-0x8000000000000000000000000000000000000000000",
879 "-0x10000000000000000000000000000000000000000000");
880
881 {
882 const char* a = "-0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0";
883 const char* sum1 = "-0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF1";
884 const char* times2 = "-0x2468ACF13579BDE02468ACF121579BDE02468ACF13579BDE0";
885 TestBigintAddSubtract(a, zero, a);
886 TestBigintAddSubtract(a, minus_one, sum1);
887 TestBigintAddSubtract(a, a, times2);
888 }
889
890 TestBigintAddSubtract("0x10000000000000000000000000000000000000000000",
891 "0xFFFF",
892 "0x1000000000000000000000000000000000000000FFFF");
893 TestBigintAddSubtract("0x10000000000000000000000000000000000000000000",
894 "0xFFFF00000000",
895 "0x10000000000000000000000000000000FFFF00000000");
896 TestBigintAddSubtract("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
897 "0x100000000",
898 "0x1000000000000000000000000000000000000FFFFFFFF");
899 TestBigintAddSubtract("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
900 "0x10000000000000000000",
901 "0x10000000000000000000000000FFFFFFFFFFFFFFFFFFF");
902
903 TestBigintAddSubtract("0xB", "-0x7", "0x4");
904 TestBigintAddSubtract("-0xB", "-0x7", "-0x12");
905 TestBigintAddSubtract("0xB", "0x7", "0x12");
906 TestBigintAddSubtract("-0xB", "0x7", "-0x4");
907 TestBigintAddSubtract("-0x7", "0xB", "0x4");
908 TestBigintAddSubtract("-0x7", "-0xB", "-0x12");
909 TestBigintAddSubtract("0x7", "0xB", "0x12");
910 TestBigintAddSubtract("0x7", "-0xB", "-0x4");
911 }
912
913
914 static void TestBigintShift(const char* a, int amount, const char* result) {
915 const Bigint& bigint_a = Bigint::Handle(BigintOperations::NewFromCString(a));
916 const Bigint& shifted =
917 Bigint::Handle(BigintOperations::ShiftLeft(bigint_a, amount));
918 const char* str_shifted = BigintOperations::ToHexCString(shifted,
919 &ZoneAllocator);
920 EXPECT_STREQ(result, str_shifted);
921 const Bigint& back_shifted =
922 Bigint::Handle(BigintOperations::ShiftRight(shifted, amount));
923 const char* str_back_shifted = BigintOperations::ToHexCString(back_shifted,
924 &ZoneAllocator);
925 EXPECT_STREQ(a, str_back_shifted);
926 }
927
928
929 TEST_CASE(BigintLeftShift) {
930 const char* zero = "0x0";
931 const char* one = "0x1";
932 const char* minus_one = "-0x1";
933
934 TestBigintShift(zero, 0, zero);
935 TestBigintShift(one, 0, one);
936 TestBigintShift("0x1234", 0, "0x1234");
937 TestBigintShift(zero, 100000, zero);
938 TestBigintShift(one, 1, "0x2");
939 TestBigintShift(one, 28, "0x10000000");
940 TestBigintShift(one, 32, "0x100000000");
941 TestBigintShift(one, 64, "0x10000000000000000");
942 TestBigintShift("0x5", 28, "0x50000000");
943 TestBigintShift("0x5", 32, "0x500000000");
944 TestBigintShift("0x5", 56, "0x500000000000000");
945 TestBigintShift("0x5", 64, "0x50000000000000000");
946 TestBigintShift("0x5", 128, "0x500000000000000000000000000000000");
947 TestBigintShift("0x5", 27, "0x28000000");
948 TestBigintShift("0x5", 31, "0x280000000");
949 TestBigintShift("0x5", 55, "0x280000000000000");
950 TestBigintShift("0x5", 63, "0x28000000000000000");
951 TestBigintShift("0x5", 127, "0x280000000000000000000000000000000");
952 TestBigintShift("0x8000001", 1, "0x10000002");
953 TestBigintShift("0x80000001", 1, "0x100000002");
954 TestBigintShift("0x8000000000000001", 1, "0x10000000000000002");
955 TestBigintShift("0x8000001", 29, "0x100000020000000");
956 TestBigintShift("0x80000001", 33, "0x10000000200000000");
957 TestBigintShift("0x8000000000000001", 65,
958 "0x100000000000000020000000000000000");
959 TestBigintShift(minus_one, 0, minus_one);
960 TestBigintShift("-0x1234", 0, "-0x1234");
961 TestBigintShift(minus_one, 1, "-0x2");
962 TestBigintShift(minus_one, 28, "-0x10000000");
963 TestBigintShift(minus_one, 32, "-0x100000000");
964 TestBigintShift(minus_one, 64, "-0x10000000000000000");
965 TestBigintShift("-0x5", 28, "-0x50000000");
966 TestBigintShift("-0x5", 32, "-0x500000000");
967 TestBigintShift("-0x5", 64, "-0x50000000000000000");
968 TestBigintShift("-0x5", 27, "-0x28000000");
969 TestBigintShift("-0x5", 31, "-0x280000000");
970 TestBigintShift("-0x5", 63, "-0x28000000000000000");
971 TestBigintShift("-0x8000001", 1, "-0x10000002");
972 TestBigintShift("-0x80000001", 1, "-0x100000002");
973 TestBigintShift("-0x8000000000000001", 1, "-0x10000000000000002");
974 TestBigintShift("-0x8000001", 29, "-0x100000020000000");
975 TestBigintShift("-0x80000001", 33, "-0x10000000200000000");
976 TestBigintShift("-0x8000000000000001", 65,
977 "-0x100000000000000020000000000000000");
978 }
979
980
981 static void TestBigintRightShift(
982 const char* a, int amount, const char* result) {
983 const Bigint& bigint_a = Bigint::Handle(BigintOperations::NewFromCString(a));
984 const Bigint& shifted =
985 Bigint::Handle(BigintOperations::ShiftRight(bigint_a, amount));
986 const char* str_shifted = BigintOperations::ToHexCString(shifted,
987 &ZoneAllocator);
988 if (strcmp(result, str_shifted)) {
989 FAIL2("%s >> %d", a, amount);
990 }
991 EXPECT_STREQ(result, str_shifted);
992 }
993
994
995 TEST_CASE(BigintRightShift) {
996 const char* zero = "0x0";
997 const char* one = "0x1";
998 const char* minus_one = "-0x1";
999
1000 TestBigintRightShift(one, 1, zero);
1001 TestBigintRightShift(minus_one, 1, minus_one);
1002 TestBigintRightShift("-0x2", 1, minus_one);
1003 TestBigintRightShift("0x12345678", 29, zero);
1004 TestBigintRightShift("-0x12345678", 29, minus_one);
1005 TestBigintRightShift("-0x12345678", 100, minus_one);
1006 TestBigintRightShift("0x5", 1, "0x2");
1007 TestBigintRightShift("0x5", 2, "0x1");
1008 TestBigintRightShift("-0x5", 1, "-0x3");
1009 TestBigintRightShift("-0x5", 2, "-0x2");
1010 TestBigintRightShift("0x10000001", 28, one);
1011 TestBigintRightShift("0x100000001", 32, one);
1012 TestBigintRightShift("0x10000000000000001", 64, one);
1013 TestBigintRightShift("-0x10000001", 28, "-0x2");
1014 TestBigintRightShift("-0x100000001", 32, "-0x2");
1015 TestBigintRightShift("-0x10000000000000001", 64, "-0x2");
1016 TestBigintRightShift("0x30000000", 29, one);
1017 TestBigintRightShift("0x300000000", 33, one);
1018 TestBigintRightShift("0x30000000000000000", 65, one);
1019 TestBigintRightShift("-0x30000000", 29, "-0x2");
1020 TestBigintRightShift("-0x300000000", 33, "-0x2");
1021 TestBigintRightShift("-0x30000000000000000", 65, "-0x2");
1022 }
1023
1024
1025 static void TestBigintBitAnd(const char* a, const char* b, const char* result) {
1026 const Bigint& bigint_a = Bigint::Handle(BigintOperations::NewFromCString(a));
1027 const Bigint& bigint_b = Bigint::Handle(BigintOperations::NewFromCString(b));
1028 const Bigint& anded =
1029 Bigint::Handle(BigintOperations::BitAnd(bigint_a, bigint_b));
1030 const char* str_anded = BigintOperations::ToHexCString(anded, &ZoneAllocator);
1031 EXPECT_STREQ(result, str_anded);
1032 const Bigint& anded2 =
1033 Bigint::Handle(BigintOperations::BitAnd(bigint_b, bigint_a));
1034 const char* str_anded2 = BigintOperations::ToHexCString(anded2,
1035 &ZoneAllocator);
1036 EXPECT_STREQ(result, str_anded2);
1037 }
1038
1039
1040 TEST_CASE(BigintBitAnd) {
1041 const char* zero = "0x0";
1042 const char* one = "0x1";
1043 const char* minus_one = "-0x1";
1044
1045 TestBigintBitAnd(one, zero, zero);
1046 TestBigintBitAnd(one, one, one);
1047 TestBigintBitAnd(minus_one, zero, zero);
1048 TestBigintBitAnd(minus_one, one, one);
1049 TestBigintBitAnd(minus_one, minus_one, minus_one);
1050 TestBigintBitAnd("0x5", "0x3", one);
1051 TestBigintBitAnd("0x5", minus_one, "0x5");
1052 TestBigintBitAnd("0x50000000", one, zero);
1053 TestBigintBitAnd("0x50000000", minus_one, "0x50000000");
1054 TestBigintBitAnd("0x500000000", one, zero);
1055 TestBigintBitAnd("0x500000000", minus_one, "0x500000000");
1056 TestBigintBitAnd("0x50000000000000000", one, zero);
1057 TestBigintBitAnd("0x50000000000000000", minus_one, "0x50000000000000000");
1058 TestBigintBitAnd("-0x50000000", "-0x50000000", "-0x50000000");
1059 TestBigintBitAnd("-0x500000000", "-0x500000000", "-0x500000000");
1060 TestBigintBitAnd("-0x50000000000000000",
1061 "-0x50000000000000000",
1062 "-0x50000000000000000");
1063 TestBigintBitAnd("0x1234567890ABCDEF012345678",
1064 "0x876543210FEDCBA0987654321",
1065 "0x224422000A9C9A0002244220");
1066 TestBigintBitAnd("-0x1234567890ABCDEF012345678",
1067 "-0x876543210FEDCBA0987654321",
1068 "-0x977557799FEFCFEF997755778");
1069 TestBigintBitAnd("0x1234567890ABCDEF012345678",
1070 "-0x876543210FEDCBA0987654321",
1071 "0x101014589002044F010101458");
1072 TestBigintBitAnd("0x1234567890ABCDEF012345678FFFFFFFFFFFFFFFFFFFFFFFFF",
1073 "-0x876543210FEDCBA0987654321",
1074 "0x1234567890ABCDEF012345678789ABCDEF012345F6789ABCDF");
1075 TestBigintBitAnd("0x12345678", "0xFFFFFFF", "0x2345678");
1076 TestBigintBitAnd("0x123456789", "0xFFFFFFFF", "0x23456789");
1077 TestBigintBitAnd("-0x10000000", "0xFFFFFFF", "0x0");
1078 TestBigintBitAnd("-0x100000000", "0xFFFFFFFF", "0x0");
1079 TestBigintBitAnd("-0x10000001", "0xFFFFFFF", "0xFFFFFFF");
1080 TestBigintBitAnd("-0x100000001", "0xFFFFFFFF", "0xFFFFFFFF");
1081 TestBigintBitAnd("-0x10000001", "0x3FFFFFFF", "0x2FFFFFFF");
1082 TestBigintBitAnd("-0x100000001", "0x3FFFFFFFF", "0x2FFFFFFFF");
1083 TestBigintBitAnd("-0x10000000000000001",
1084 "0x3FFFFFFFFFFFFFFFF",
1085 "0x2FFFFFFFFFFFFFFFF");
1086 TestBigintBitAnd("-0x100000000000000", "0xFFFFFFFFFFFFFF", "0x0");
1087 TestBigintBitAnd("-0x10000000000000000", "0xFFFFFFFFFFFFFFFF", "0x0");
1088 TestBigintBitAnd("-0x300000000000000",
1089 "0xFFFFFFFFFFFFFFF",
1090 "0xD00000000000000");
1091 TestBigintBitAnd("-0x30000000000000000",
1092 "0xFFFFFFFFFFFFFFFFF",
1093 "0xD0000000000000000");
1094 TestBigintBitAnd("-0x10000000", "-0x10000000", "-0x10000000");
1095 TestBigintBitAnd("-0x100000000", "-0x100000000", "-0x100000000");
1096 TestBigintBitAnd("-0x100000000000000",
1097 "-0x100000000000000",
1098 "-0x100000000000000");
1099 TestBigintBitAnd("-0x10000000000000000",
1100 "-0x10000000000000000",
1101 "-0x10000000000000000");
1102 TestBigintBitAnd("-0x3", "-0x2", "-0x4");
1103 TestBigintBitAnd("-0x10000000", "-0x10000001", "-0x20000000");
1104 TestBigintBitAnd("-0x100000000", "-0x100000001", "-0x200000000");
1105 TestBigintBitAnd("-0x100000000000000",
1106 "-0x100000000000001",
1107 "-0x200000000000000");
1108 TestBigintBitAnd("-0x10000000000000000",
1109 "-0x10000000000000001",
1110 "-0x20000000000000000");
1111 TestBigintBitAnd("0x123456789ABCDEF01234567890",
1112 "0x3FFFFFFF", // Max Smi for 32 bits.
1113 "0x34567890");
1114 TestBigintBitAnd("0x123456789ABCDEF01274567890",
1115 "0x3FFFFFFF", // Max Smi for 32 bits.
1116 "0x34567890");
1117 TestBigintBitAnd("0x123456789ABCDEF01234567890",
1118 "0x40000000", // Max Smi for 32 bits + 1.
1119 "0x0");
1120 TestBigintBitAnd("0x123456789ABCDEF01274567890",
1121 "0x40000000", // Max Smi for 32 bits + 1.
1122 "0x40000000");
1123 TestBigintBitAnd("0x123456789ABCDEF01234567890",
1124 "0x3FFFFFFFFFFFFFFF", // Max Smi for 64 bits.
1125 "0x3CDEF01234567890");
1126 TestBigintBitAnd("0x123456789ACCDEF01234567890",
1127 "0x4000000000000000", // Max Smi for 64 bits + 1.
1128 "0x4000000000000000");
1129 TestBigintBitAnd("0x123456789ABCDEF01234567890",
1130 "0x4000000000000000", // Max Smi for 64 bits + 1.
1131 "0x0");
1132 }
1133
1134
1135 static void TestBigintBitOr(const char* a, const char* b, const char* result) {
1136 const Bigint& bigint_a = Bigint::Handle(BigintOperations::NewFromCString(a));
1137 const Bigint& bigint_b = Bigint::Handle(BigintOperations::NewFromCString(b));
1138 const Bigint& ored =
1139 Bigint::Handle(BigintOperations::BitOr(bigint_a, bigint_b));
1140 const char* str_ored = BigintOperations::ToHexCString(ored, &ZoneAllocator);
1141 EXPECT_STREQ(result, str_ored);
1142 const Bigint& ored2 =
1143 Bigint::Handle(BigintOperations::BitOr(bigint_b, bigint_a));
1144 const char* str_ored2 = BigintOperations::ToHexCString(ored2, &ZoneAllocator);
1145 EXPECT_STREQ(result, str_ored2);
1146 }
1147
1148
1149 TEST_CASE(BigintBitOr) {
1150 const char* zero = "0x0";
1151 const char* one = "0x1";
1152 const char* minus_one = "-0x1";
1153
1154 TestBigintBitOr(one, zero, one);
1155 TestBigintBitOr(one, one, one);
1156 TestBigintBitOr(minus_one, zero, minus_one);
1157 TestBigintBitOr(minus_one, one, minus_one);
1158 TestBigintBitOr(minus_one, minus_one, minus_one);
1159 TestBigintBitOr("-0x3", one, "-0x3");
1160 TestBigintBitOr("0x5", "0x3", "0x7");
1161 TestBigintBitOr("0x5", minus_one, minus_one);
1162 TestBigintBitOr("0x5", zero, "0x5");
1163 TestBigintBitOr("0x50000000", one, "0x50000001");
1164 TestBigintBitOr("0x50000000", minus_one, minus_one);
1165 TestBigintBitOr("0x500000000", one, "0x500000001");
1166 TestBigintBitOr("0x500000000", minus_one, minus_one);
1167 TestBigintBitOr("0x50000000000000000", one, "0x50000000000000001");
1168 TestBigintBitOr("0x50000000000000000", minus_one, minus_one);
1169 TestBigintBitOr("-0x50000000", "-0x50000000", "-0x50000000");
1170 TestBigintBitOr("-0x500000000", "-0x500000000", "-0x500000000");
1171 TestBigintBitOr("-0x50000000000000000",
1172 "-0x50000000000000000",
1173 "-0x50000000000000000");
1174 TestBigintBitOr("0x1234567890ABCDEF012345678",
1175 "0x876543210FEDCBA0987654321",
1176 "0x977557799FEFCFEF997755779");
1177 TestBigintBitOr("-0x1234567890ABCDEF012345678",
1178 "-0x876543210FEDCBA0987654321",
1179 "-0x224422000A9C9A0002244221");
1180 TestBigintBitOr("0x1234567890ABCDEF012345678",
1181 "-0x876543210FEDCBA0987654321",
1182 "-0x854101010F440200985410101");
1183 TestBigintBitOr("0x1234567890ABCDEF012345678FFFFFFFFFFFFFFFFFFFFFFFFF",
1184 "-0x876543210FEDCBA0987654321",
1185 "-0x1");
1186 TestBigintBitOr("0x12345678", "0xFFFFFFF", "0x1FFFFFFF");
1187 TestBigintBitOr("0x123456789", "0xFFFFFFFF", "0x1FFFFFFFF");
1188 TestBigintBitOr("-0x10000000", "0xFFFFFFF", "-0x1");
1189 TestBigintBitOr("-0x100000000", "0xFFFFFFFF", "-0x1");
1190 TestBigintBitOr("-0x10000001", "0xFFFFFFF", "-0x10000001");
1191 TestBigintBitOr("-0x100000001", "0xFFFFFFFF", "-0x100000001");
1192 TestBigintBitOr("-0x10000001", "0x3FFFFFFF", "-0x1");
1193 TestBigintBitOr("-0x100000001", "0x3FFFFFFFF", "-0x1");
1194 TestBigintBitOr("-0x10000000000000001", "0x3FFFFFFFFFFFFFFFF", "-0x1");
1195 TestBigintBitOr("-0x100000000000000", "0xFFFFFFFFFFFFFF", "-0x1");
1196 TestBigintBitOr("-0x10000000000000000", "0xFFFFFFFFFFFFFFFF", "-0x1");
1197 TestBigintBitOr("-0x300000000000000", "0xFFFFFFFFFFFFFFF", "-0x1");
1198 TestBigintBitOr("-0x30000000000000000", "0xFFFFFFFFFFFFFFFFF", "-0x1");
1199 TestBigintBitOr("-0x10000000", "-0x10000000", "-0x10000000");
1200 TestBigintBitOr("-0x100000000", "-0x100000000", "-0x100000000");
1201 TestBigintBitOr("-0x100000000000000",
1202 "-0x100000000000000",
1203 "-0x100000000000000");
1204 TestBigintBitOr("-0x10000000000000000",
1205 "-0x10000000000000000",
1206 "-0x10000000000000000");
1207 TestBigintBitOr("-0x10000000", "-0x10000001", "-0x1");
1208 TestBigintBitOr("-0x100000000", "-0x100000001", "-0x1");
1209 TestBigintBitOr("-0x100000000000000", "-0x100000000000001", "-0x1");
1210 TestBigintBitOr("-0x10000000000000000", "-0x10000000000000001", "-0x1");
1211 TestBigintBitOr("-0x10000000000000000", "-0x1", "-0x1");
1212 }
1213
1214
1215 static void TestBigintBitXor(const char* a, const char* b, const char* result) {
1216 const Bigint& bigint_a = Bigint::Handle(BigintOperations::NewFromCString(a));
1217 const Bigint& bigint_b = Bigint::Handle(BigintOperations::NewFromCString(b));
1218 const Bigint& xored =
1219 Bigint::Handle(BigintOperations::BitXor(bigint_a, bigint_b));
1220 const char* str_xored = BigintOperations::ToHexCString(xored, &ZoneAllocator);
1221 EXPECT_STREQ(result, str_xored);
1222 const Bigint& xored2 =
1223 Bigint::Handle(BigintOperations::BitXor(bigint_b, bigint_a));
1224 const char* str_xored2 = BigintOperations::ToHexCString(xored2,
1225 &ZoneAllocator);
1226 EXPECT_STREQ(result, str_xored2);
1227 const Bigint& xored3 =
1228 Bigint::Handle(BigintOperations::BitXor(bigint_a, xored2));
1229 const char* str_xored3 = BigintOperations::ToHexCString(xored3,
1230 &ZoneAllocator);
1231 EXPECT_STREQ(b, str_xored3);
1232 const Bigint& xored4 =
1233 Bigint::Handle(BigintOperations::BitXor(xored2, bigint_a));
1234 const char* str_xored4 = BigintOperations::ToHexCString(xored4,
1235 &ZoneAllocator);
1236 EXPECT_STREQ(b, str_xored4);
1237 const Bigint& xored5 =
1238 Bigint::Handle(BigintOperations::BitXor(bigint_b, xored2));
1239 const char* str_xored5 = BigintOperations::ToHexCString(xored5,
1240 &ZoneAllocator);
1241 EXPECT_STREQ(a, str_xored5);
1242 const Bigint& xored6 =
1243 Bigint::Handle(BigintOperations::BitXor(xored2, bigint_b));
1244 const char* str_xored6 = BigintOperations::ToHexCString(xored6,
1245 &ZoneAllocator);
1246 EXPECT_STREQ(a, str_xored6);
1247 }
1248
1249
1250 TEST_CASE(BigintBitXor) {
1251 const char* zero = "0x0";
1252 const char* one = "0x1";
1253 const char* minus_one = "-0x1";
1254
1255 TestBigintBitXor(one, zero, one);
1256 TestBigintBitXor(one, one, zero);
1257 TestBigintBitXor(minus_one, zero, minus_one);
1258 TestBigintBitXor(minus_one, one, "-0x2");
1259 TestBigintBitXor(minus_one, minus_one, zero);
1260 TestBigintBitXor("0x5", "0x3", "0x6");
1261 TestBigintBitXor("0x5", minus_one, "-0x6");
1262 TestBigintBitXor("0x5", zero, "0x5");
1263 TestBigintBitXor(minus_one, "-0x8", "0x7");
1264 TestBigintBitXor("0x50000000", one, "0x50000001");
1265 TestBigintBitXor("0x50000000", minus_one, "-0x50000001");
1266 TestBigintBitXor("0x500000000", one, "0x500000001");
1267 TestBigintBitXor("0x500000000", minus_one, "-0x500000001");
1268 TestBigintBitXor("0x50000000000000000", one, "0x50000000000000001");
1269 TestBigintBitXor("0x50000000000000000", minus_one, "-0x50000000000000001");
1270 TestBigintBitXor("-0x50000000", "-0x50000000", zero);
1271 TestBigintBitXor("-0x500000000", "-0x500000000", zero);
1272 TestBigintBitXor("-0x50000000000000000", "-0x50000000000000000", zero);
1273 TestBigintBitXor("0x1234567890ABCDEF012345678",
1274 "0x876543210FEDCBA0987654321",
1275 "0x955115599F46064F995511559");
1276 TestBigintBitXor("-0x1234567890ABCDEF012345678",
1277 "-0x876543210FEDCBA0987654321",
1278 "0x955115599F46064F995511557");
1279 TestBigintBitXor("0x1234567890ABCDEF012345678",
1280 "-0x876543210FEDCBA0987654321",
1281 "-0x955115599F46064F995511559");
1282 TestBigintBitXor("0x1234567890ABCDEF012345678FFFFFFFFFFFFFFFFFFFFFFFFF",
1283 "-0x876543210FEDCBA0987654321",
1284 "-0x1234567890ABCDEF012345678789ABCDEF012345F6789ABCE0");
1285 TestBigintBitXor("0x12345678", "0xFFFFFFF", "0x1DCBA987");
1286 TestBigintBitXor("0x123456789", "0xFFFFFFFF", "0x1DCBA9876");
1287 TestBigintBitXor("-0x10000000", "0xFFFFFFF", "-0x1");
1288 TestBigintBitXor("-0x100000000", "0xFFFFFFFF", "-0x1");
1289 TestBigintBitXor("-0x10000001", "0xFFFFFFF", "-0x20000000");
1290 TestBigintBitXor("-0x100000001", "0xFFFFFFFF", "-0x200000000");
1291 TestBigintBitXor("-0x10000001", "0x3FFFFFFF", "-0x30000000");
1292 TestBigintBitXor("-0x100000001", "0x3FFFFFFFF", "-0x300000000");
1293 TestBigintBitXor("-0x10000000000000001",
1294 "0x3FFFFFFFFFFFFFFFF",
1295 "-0x30000000000000000");
1296 TestBigintBitXor("-0x100000000000000", "0xFFFFFFFFFFFFFF", "-0x1");
1297 TestBigintBitXor("-0x10000000000000000", "0xFFFFFFFFFFFFFFFF", "-0x1");
1298 TestBigintBitXor("-0x300000000000000",
1299 "0xFFFFFFFFFFFFFFF",
1300 "-0xD00000000000001");
1301 TestBigintBitXor("-0x30000000000000000",
1302 "0xFFFFFFFFFFFFFFFFF",
1303 "-0xD0000000000000001");
1304 TestBigintBitXor("-0x10000000", "-0x10000000", zero);
1305 TestBigintBitXor("-0x100000000", "-0x100000000", zero);
1306 TestBigintBitXor("-0x100000000000000", "-0x100000000000000", zero);
1307 TestBigintBitXor("-0x10000000000000000", "-0x10000000000000000", zero);
1308 TestBigintBitXor("-0x10000000", "-0x10000001", "0x1FFFFFFF");
1309 TestBigintBitXor("-0x100000000", "-0x100000001", "0x1FFFFFFFF");
1310 TestBigintBitXor("-0x100000000000000",
1311 "-0x100000000000001",
1312 "0x1FFFFFFFFFFFFFF");
1313 TestBigintBitXor("-0x10000000000000000",
1314 "-0x10000000000000001",
1315 "0x1FFFFFFFFFFFFFFFF");
1316 }
1317
1318
1319 static void TestBigintBitNot(const char* a, const char* result) {
1320 const Bigint& bigint_a = Bigint::Handle(BigintOperations::NewFromCString(a));
1321 const Bigint& inverted =
1322 Bigint::Handle(BigintOperations::BitNot(bigint_a));
1323 const char* str_inverted = BigintOperations::ToHexCString(inverted,
1324 &ZoneAllocator);
1325 EXPECT_STREQ(result, str_inverted);
1326 const Bigint& back =
1327 Bigint::Handle(BigintOperations::BitNot(inverted));
1328 const char* str_back = BigintOperations::ToHexCString(back, &ZoneAllocator);
1329 EXPECT_STREQ(a, str_back);
1330 }
1331
1332
1333 TEST_CASE(BigintBitNot) {
1334 const char* zero = "0x0";
1335 const char* one = "0x1";
1336 const char* minus_one = "-0x1";
1337
1338 TestBigintBitNot(zero, minus_one);
1339 TestBigintBitNot(one, "-0x2");
1340 TestBigintBitNot("0x5", "-0x6");
1341 TestBigintBitNot("0x50000000", "-0x50000001");
1342 TestBigintBitNot("0xFFFFFFF", "-0x10000000");
1343 TestBigintBitNot("0xFFFFFFFF", "-0x100000000");
1344 TestBigintBitNot("0xFFFFFFFFFFFFFF", "-0x100000000000000");
1345 TestBigintBitNot("0xFFFFFFFFFFFFFFFF", "-0x10000000000000000");
1346 TestBigintBitNot("0x1234567890ABCDEF012345678",
1347 "-0x1234567890ABCDEF012345679");
1348 }
1349
1350
1351 static void TestBigintMultiplyDivide(const char* a,
1352 const char* b,
1353 const char* product) {
1354 const Bigint& bigint_a = Bigint::Handle(BigintOperations::NewFromCString(a));
1355 const Bigint& bigint_b = Bigint::Handle(BigintOperations::NewFromCString(b));
1356 const Bigint& computed_product =
1357 Bigint::Handle(BigintOperations::Multiply(bigint_a, bigint_b));
1358 const char* str_product = BigintOperations::ToHexCString(computed_product,
1359 &ZoneAllocator);
1360 EXPECT_STREQ(product, str_product);
1361 const Bigint& computed_product2 =
1362 Bigint::Handle(BigintOperations::Multiply(bigint_b, bigint_a));
1363 const char* str_product2 = BigintOperations::ToHexCString(computed_product2,
1364 &ZoneAllocator);
1365 EXPECT_STREQ(product, str_product2);
1366
1367 const Bigint& bigint_product =
1368 Bigint::Handle(BigintOperations::NewFromCString(product));
1369 if (!bigint_a.IsZero()) {
1370 const Bigint& computed_quotient1 =
1371 Bigint::Handle(BigintOperations::Divide(bigint_product, bigint_a));
1372 const char* str_quotient1 =
1373 BigintOperations::ToHexCString(computed_quotient1, &ZoneAllocator);
1374 EXPECT_STREQ(b, str_quotient1);
1375 }
1376
1377 if (!bigint_b.IsZero()) {
1378 const Bigint& computed_quotient2 =
1379 Bigint::Handle(BigintOperations::Divide(bigint_product, bigint_b));
1380 const char* str_quotient2 =
1381 BigintOperations::ToHexCString(computed_quotient2, &ZoneAllocator);
1382 EXPECT_STREQ(a, str_quotient2);
1383 }
1384 }
1385
1386
1387 TEST_CASE(BigintMultiplyDivide) {
1388 const char* zero = "0x0";
1389 const char* one = "0x1";
1390 const char* minus_one = "-0x1";
1391
1392 TestBigintMultiplyDivide(zero, zero, zero);
1393 TestBigintMultiplyDivide(one, one, one);
1394 TestBigintMultiplyDivide(one, zero, zero);
1395 TestBigintMultiplyDivide(zero, one, zero);
1396 TestBigintMultiplyDivide(one, minus_one, minus_one);
1397 TestBigintMultiplyDivide(minus_one, minus_one, one);
1398 TestBigintMultiplyDivide("0x42", one, "0x42");
1399 TestBigintMultiplyDivide("0x42", "0x2", "0x84");
1400 TestBigintMultiplyDivide("0xFFFF", "0x2", "0x1FFFE");
1401 TestBigintMultiplyDivide("0x3", "0x5", "0xF");
1402 TestBigintMultiplyDivide("0xFFFFF", "0x5", "0x4FFFFB");
1403 TestBigintMultiplyDivide("0xFFFFFFF", "0x5", "0x4FFFFFFB");
1404 TestBigintMultiplyDivide("0xFFFFFFFF", "0x5", "0x4FFFFFFFB");
1405 TestBigintMultiplyDivide("0xFFFFFFFFFFFFFFFF", "0x5", "0x4FFFFFFFFFFFFFFFB");
1406 TestBigintMultiplyDivide("0xFFFFFFFFFFFFFFFF", "0x3039",
1407 "0x3038FFFFFFFFFFFFCFC7");
1408 TestBigintMultiplyDivide("0xFFFFFFFFFFFFFFFF",
1409 "0xFFFFFFFFFFFFFFFFFFFFFFFFFF",
1410 "0xFFFFFFFFFFFFFFFEFFFFFFFFFF0000000000000001");
1411 TestBigintMultiplyDivide(
1412 "0xFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000",
1413 "0xFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000",
1414 "0xFFFFFFFFFFFFFFFEFFFFFFFFFF000000000000000100000000000000"
1415 "000000000000000000000000000000000000000000000000000000000000");
1416 TestBigintMultiplyDivide("0x10000001", "0x5", "0x50000005");
1417 TestBigintMultiplyDivide(
1418 "0x1234567890ABCDEF01234567890ABCDEF01234567890ABCDEF"
1419 "01234567890ABCDEF01234567890ABCDEF",
1420 "0x1234567890ABCDEF01234567890ABCDEF01234567890ABCDEF"
1421 "01234567890ABCDEF01234567890ABCDEF",
1422 "0x14B66DC328828BCA670CBE52943AA3894CCCE15C8F5ED1E55F"
1423 "328F6D3F579F992299850C4B5B95213EF3FB7B4E73B5F43D4299"
1424 "5B9F6FD5441C275F2FF89F86F28F47A94CA37481090DCCCDCA6475F09A2F2A521");
1425 TestBigintMultiplyDivide(
1426 "0x1234567890ABCDEF01234567890ABCDEF01234567890ABCDEF01234567890ABCDEF"
1427 "01234567890ABCDEF",
1428 "0x1234567890123456789012345678901234567890123456789012345678901234567890"
1429 "123456789012345678901234567890123456789012345678901234567890123456789012"
1430 "345678901234567890123456789012345678901234567890123456789012345678901234"
1431 "567890123456789012345678901234567890123456789012345678901234567890123456"
1432 "789012345678901234567890123456789012345678901234567890123456789012345678"
1433 "90123456789012345678901234567890",
1434 "0x14B66DC327D3C88D7EAA988BBFFA9BBA877826E7EDAF373907A931FBFC3A25231DF7F2"
1435 "516F511FB1638F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A"
1436 "8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F"
1437 "0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B"
1438 "570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B57"
1439 "0F4A8F0B570F4A8F0B570F4A8F0B570F35D89D93E776C67DD864B2034B5C739007933027"
1440 "5CDFD41E07A15D0F5AD5256BED5F1CF91FBA375DE70");
1441 TestBigintMultiplyDivide(
1442 "0x1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1443 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1444 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1445 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1446 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1447 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1448 "FFFFFFFFFFFFFFFFF",
1449 "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1450 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
1451 "0x1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1452 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFFF"
1453 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1454 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1455 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1456 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1457 "FFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000"
1458 "0000000000000000000000000000000000000000000000000000000000000000000001");
1459 TestBigintMultiplyDivide(
1460 "0x1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1461 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1462 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1463 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1464 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1465 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1466 "FFFFFFFFFFFFFFFFF",
1467 "0x1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1468 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1469 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1470 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1471 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1472 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1473 "FFFFFFFFFFFFFFFFF",
1474 "0x3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1475 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1476 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1477 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1478 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1479 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1480 "FFFFFFFFFFFFFFFFC0000000000000000000000000000000000000000000000000000000"
1481 "000000000000000000000000000000000000000000000000000000000000000000000000"
1482 "000000000000000000000000000000000000000000000000000000000000000000000000"
1483 "000000000000000000000000000000000000000000000000000000000000000000000000"
1484 "000000000000000000000000000000000000000000000000000000000000000000000000"
1485 "000000000000000000000000000000000000000000000000000000000000000000000000"
1486 "0000000000000000000000000000001");
1487
1488 // A 256 28-bit digits number squared.
1489 TestBigintMultiplyDivide(
1490 "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1491 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1492 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1493 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1494 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1495 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1496 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1497 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1498 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1499 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1500 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1501 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1502 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1503 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1504 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1505 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1506 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1507 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1508 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1509 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1510 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1511 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1512 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1513 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1514 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
1515 "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1516 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1517 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1518 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1519 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1520 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1521 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1522 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1523 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1524 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1525 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1526 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1527 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1528 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1529 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1530 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1531 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1532 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1533 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1534 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1535 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1536 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1537 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1538 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1539 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
1540 "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1541 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1542 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1543 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1544 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1545 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1546 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1547 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1548 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1549 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1550 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1551 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1552 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1553 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1554 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1555 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1556 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1557 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1558 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1559 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1560 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1561 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1562 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1563 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1564 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE000000"
1565 "000000000000000000000000000000000000000000000000000000000000000000000000"
1566 "000000000000000000000000000000000000000000000000000000000000000000000000"
1567 "000000000000000000000000000000000000000000000000000000000000000000000000"
1568 "000000000000000000000000000000000000000000000000000000000000000000000000"
1569 "000000000000000000000000000000000000000000000000000000000000000000000000"
1570 "000000000000000000000000000000000000000000000000000000000000000000000000"
1571 "000000000000000000000000000000000000000000000000000000000000000000000000"
1572 "000000000000000000000000000000000000000000000000000000000000000000000000"
1573 "000000000000000000000000000000000000000000000000000000000000000000000000"
1574 "000000000000000000000000000000000000000000000000000000000000000000000000"
1575 "000000000000000000000000000000000000000000000000000000000000000000000000"
1576 "000000000000000000000000000000000000000000000000000000000000000000000000"
1577 "000000000000000000000000000000000000000000000000000000000000000000000000"
1578 "000000000000000000000000000000000000000000000000000000000000000000000000"
1579 "000000000000000000000000000000000000000000000000000000000000000000000000"
1580 "000000000000000000000000000000000000000000000000000000000000000000000000"
1581 "000000000000000000000000000000000000000000000000000000000000000000000000"
1582 "000000000000000000000000000000000000000000000000000000000000000000000000"
1583 "000000000000000000000000000000000000000000000000000000000000000000000000"
1584 "000000000000000000000000000000000000000000000000000000000000000000000000"
1585 "000000000000000000000000000000000000000000000000000000000000000000000000"
1586 "000000000000000000000000000000000000000000000000000000000000000000000000"
1587 "000000000000000000000000000000000000000000000000000000000000000000000000"
1588 "000000000000000000000000000000000000000000000000000000000000000000000000"
1589 "0000000000000000000000000000000000000000000000000000000001");
1590
1591
1592 TestBigintMultiplyDivide(
1593 "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1594 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1595 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1596 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1597 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1598 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1599 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1600 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1601 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1602 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1603 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1604 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1605 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1606 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1607 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1608 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1609 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1610 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1611 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1612 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1613 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1614 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1615 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1616 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1617 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
1618 "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1619 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1620 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1621 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1622 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1623 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1624 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1625 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1626 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1627 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1628 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1629 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1630 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1631 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1632 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1633 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1634 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1635 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1636 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1637 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1638 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1639 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1640 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1641 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1642 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1643 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1644 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1645 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1646 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1647 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1648 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1649 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1650 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1651 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1652 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1653 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1654 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1655 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1656 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1657 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1658 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1659 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1660 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1661 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1662 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1663 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1664 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1665 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1666 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1667 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1668 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1669 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1670 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1671 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1672 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1673 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1674 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1675 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1676 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1677 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1678 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1679 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1680 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1681 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1682 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1683 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1684 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1685 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1686 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1687 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1688 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1689 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1690 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1691 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1692 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1693 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1694 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1695 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1696 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1697 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1698 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1699 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1700 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1701 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1702 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1703 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1704 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1705 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1706 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1707 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1708 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1709 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1710 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1711 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1712 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1713 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1714 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1715 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1716 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1717 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1718 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1719 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1720 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1721 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1722 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1723 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1724 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1725 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1726 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1727 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1728 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1729 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1730 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1731 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1732 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1733 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1734 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1735 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1736 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1737 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1738 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1739 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1740 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1741 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1742 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1743 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1744 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1745 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1746 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1747 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1748 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1749 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1750 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1751 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1752 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1753 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1754 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1755 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1756 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1757 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1758 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1759 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1760 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1761 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1762 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1763 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1764 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1765 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1766 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1767 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1768 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1769 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1770 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1771 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1772 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1773 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1774 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1775 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1776 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1777 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1778 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1779 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1780 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1781 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1782 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1783 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1784 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1785 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1786 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1787 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1788 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1789 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1790 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1791 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1792 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1793 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1794 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1795 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1796 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1797 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1798 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1799 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1800 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1801 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1802 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1803 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1804 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1805 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1806 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1807 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1808 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1809 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1810 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1811 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1812 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1813 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1814 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1815 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1816 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1817 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1818 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1819 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1820 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1821 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1822 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1823 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1824 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1825 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1826 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1827 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1828 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1829 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1830 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1831 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1832 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1833 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1834 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1835 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1836 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1837 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1838 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1839 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1840 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1841 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1842 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1843 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1844 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1845 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1846 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1847 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1848 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1849 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1850 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1851 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1852 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1853 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1854 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1855 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1856 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1857 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1858 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1859 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1860 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1861 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1862 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1863 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1864 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1865 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1866 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
1867 "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1868 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1869 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1870 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1871 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1872 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1873 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1874 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1875 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1876 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1877 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1878 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1879 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1880 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1881 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1882 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1883 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1884 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1885 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1886 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1887 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1888 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1889 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1890 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1891 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFF"
1892 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1893 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1894 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1895 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1896 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1897 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1898 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1899 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1900 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1901 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1902 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1903 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1904 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1905 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1906 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1907 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1908 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1909 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1910 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1911 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1912 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1913 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1914 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1915 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1916 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1917 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1918 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1919 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1920 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1921 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1922 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1923 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1924 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1925 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1926 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1927 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1928 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1929 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1930 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1931 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1932 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1933 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1934 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1935 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1936 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1937 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1938 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1939 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1940 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1941 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1942 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1943 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1944 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1945 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1946 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1947 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1948 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1949 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1950 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1951 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1952 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1953 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1954 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1955 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1956 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1957 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1958 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1959 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1960 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1961 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1962 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1963 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1964 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1965 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1966 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1967 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1968 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1969 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1970 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1971 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1972 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1973 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1974 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1975 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1976 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1977 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1978 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1979 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1980 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1981 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1982 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1983 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1984 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1985 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1986 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1987 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1988 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1989 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1990 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1991 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1992 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1993 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1994 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1995 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1996 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1997 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1998 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
1999 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2000 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2001 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2002 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2003 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2004 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2005 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2006 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2007 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2008 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2009 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2010 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2011 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2012 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2013 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2014 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2015 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2016 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2017 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2018 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2019 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2020 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2021 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2022 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2023 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2024 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2025 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2026 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2027 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2028 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2029 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2030 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2031 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2032 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2033 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2034 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2035 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2036 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2037 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2038 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2039 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2040 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2041 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2042 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2043 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2044 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2045 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2046 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2047 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2048 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2049 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2050 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2051 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2052 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2053 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2054 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2055 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2056 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2057 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2058 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2059 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2060 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2061 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2062 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2063 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2064 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2065 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2066 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2067 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2068 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2069 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2070 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2071 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2072 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2073 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2074 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2075 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2076 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2077 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2078 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2079 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2080 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2081 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2082 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2083 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2084 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2085 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2086 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2087 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2088 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2089 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2090 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2091 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2092 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2093 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2094 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2095 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2096 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2097 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2098 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2099 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2100 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2101 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2102 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2103 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2104 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2105 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2106 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2107 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2108 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2109 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2110 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2111 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2112 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2113 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2114 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
2115 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000"
2116 "000000000000000000000000000000000000000000000000000000000000000000000000"
2117 "000000000000000000000000000000000000000000000000000000000000000000000000"
2118 "000000000000000000000000000000000000000000000000000000000000000000000000"
2119 "000000000000000000000000000000000000000000000000000000000000000000000000"
2120 "000000000000000000000000000000000000000000000000000000000000000000000000"
2121 "000000000000000000000000000000000000000000000000000000000000000000000000"
2122 "000000000000000000000000000000000000000000000000000000000000000000000000"
2123 "000000000000000000000000000000000000000000000000000000000000000000000000"
2124 "000000000000000000000000000000000000000000000000000000000000000000000000"
2125 "000000000000000000000000000000000000000000000000000000000000000000000000"
2126 "000000000000000000000000000000000000000000000000000000000000000000000000"
2127 "000000000000000000000000000000000000000000000000000000000000000000000000"
2128 "000000000000000000000000000000000000000000000000000000000000000000000000"
2129 "000000000000000000000000000000000000000000000000000000000000000000000000"
2130 "000000000000000000000000000000000000000000000000000000000000000000000000"
2131 "000000000000000000000000000000000000000000000000000000000000000000000000"
2132 "000000000000000000000000000000000000000000000000000000000000000000000000"
2133 "000000000000000000000000000000000000000000000000000000000000000000000000"
2134 "000000000000000000000000000000000000000000000000000000000000000000000000"
2135 "000000000000000000000000000000000000000000000000000000000000000000000000"
2136 "000000000000000000000000000000000000000000000000000000000000000000000000"
2137 "000000000000000000000000000000000000000000000000000000000000000000000000"
2138 "000000000000000000000000000000000000000000000000000000000000000000000000"
2139 "000000000000000000000000000000000000000000000000000000000000000000000000"
2140 "0000000000000000000000000000000000000000000000000000000001");
2141 }
2142
2143
2144 static void TestBigintDivideRemainder(const char* a,
2145 const char* b,
2146 const char* quotient,
2147 const char* remainder) {
2148 const Bigint& bigint_a = Bigint::Handle(BigintOperations::NewFromCString(a));
2149 const Bigint& bigint_b = Bigint::Handle(BigintOperations::NewFromCString(b));
2150 const Bigint& computed_quotient =
2151 Bigint::Handle(BigintOperations::Divide(bigint_a, bigint_b));
2152 const Bigint& computed_remainder =
2153 Bigint::Handle(BigintOperations::Remainder(bigint_a, bigint_b));
2154 const char* str_quotient = BigintOperations::ToHexCString(computed_quotient,
2155 &ZoneAllocator);
2156 const char* str_remainder =
2157 BigintOperations::ToHexCString(computed_remainder, &ZoneAllocator);
2158 EXPECT_STREQ(quotient, str_quotient);
2159 EXPECT_STREQ(remainder, str_remainder);
2160 }
2161
2162
2163 TEST_CASE(BigintDivideRemainder) {
2164 const char* zero = "0x0";
2165 const char* one = "0x1";
2166 const char* minus_one = "-0x1";
2167
2168 TestBigintDivideRemainder(one, one, one, zero);
2169 TestBigintDivideRemainder(zero, one, zero, zero);
2170 TestBigintDivideRemainder(minus_one, one, minus_one, zero);
2171 TestBigintDivideRemainder(one, "0x2", zero, one);
2172 TestBigintDivideRemainder(minus_one, "0x7", zero, minus_one);
2173 TestBigintDivideRemainder("0xB", "0x7", one, "0x4");
2174 TestBigintDivideRemainder("0x12345678", "0x7", "0x299C335", "0x5");
2175 TestBigintDivideRemainder("-0x12345678", "0x7", "-0x299C335", "-0x5");
2176 TestBigintDivideRemainder("0x12345678", "-0x7", "-0x299C335", "0x5");
2177 TestBigintDivideRemainder("-0x12345678", "-0x7", "0x299C335", "-0x5");
2178 TestBigintDivideRemainder("0x7", "0x12345678", zero, "0x7");
2179 TestBigintDivideRemainder("-0x7", "0x12345678", zero, "-0x7");
2180 TestBigintDivideRemainder("-0x7", "-0x12345678", zero, "-0x7");
2181 TestBigintDivideRemainder("0x7", "-0x12345678", zero, "0x7");
2182 TestBigintDivideRemainder("0x12345678", "0x7", "0x299C335", "0x5");
2183 TestBigintDivideRemainder("-0x12345678", "0x7", "-0x299C335", "-0x5");
2184 TestBigintDivideRemainder("0x12345678", "-0x7", "-0x299C335", "0x5");
2185 TestBigintDivideRemainder("-0x12345678", "-0x7", "0x299C335", "-0x5");
2186 TestBigintDivideRemainder(
2187 "0x14B66DC327D3C88D7EAA988BBFFA9BBA877826E7EDAF373907A931FBFC3A25231DF7F2"
2188 "516F511FB1638F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A"
2189 "8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F"
2190 "0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B"
2191 "570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B57"
2192 "0F4A8F0B570F4A8F0B570F4A8F0B570F35D89D93E776C67DD864B2034B5C739007933027"
2193 "5CDFD41E07A15D0F5AD5256BED5F1CF91FBA375DE70",
2194 "0x1234567890ABCDEF01234567890ABCDEF01234567890ABCDEF01234567890ABCDEF"
2195 "01234567890ABCDEF",
2196 "0x1234567890123456789012345678901234567890123456789012345678901234567890"
2197 "123456789012345678901234567890123456789012345678901234567890123456789012"
2198 "345678901234567890123456789012345678901234567890123456789012345678901234"
2199 "567890123456789012345678901234567890123456789012345678901234567890123456"
2200 "789012345678901234567890123456789012345678901234567890123456789012345678"
2201 "90123456789012345678901234567890",
2202 zero);
2203 TestBigintDivideRemainder(
2204 "0x14B66DC327D3C88D7EAA988BBFFA9BBA877826E7EDAF373907A931FBFC3A25231DF7F2"
2205 "516F511FB1638F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A"
2206 "8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F"
2207 "0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B"
2208 "570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B57"
2209 "0F4A8F0B570F4A8F0B570F4A8F0B570F35D89D93E776C67DD864B2034B5C739007933027"
2210 "5CDFD41E07A15D0F5AD5256BED5F1CF91FBA375DE71",
2211 "0x1234567890ABCDEF01234567890ABCDEF01234567890ABCDEF01234567890ABCDEF"
2212 "01234567890ABCDEF",
2213 "0x1234567890123456789012345678901234567890123456789012345678901234567890"
2214 "123456789012345678901234567890123456789012345678901234567890123456789012"
2215 "345678901234567890123456789012345678901234567890123456789012345678901234"
2216 "567890123456789012345678901234567890123456789012345678901234567890123456"
2217 "789012345678901234567890123456789012345678901234567890123456789012345678"
2218 "90123456789012345678901234567890",
2219 one);
2220 TestBigintDivideRemainder(
2221 "0x14B66DC327D3C88D7EAA988BBFFA9BBA877826E7EDAF373907A931FBFC3A25231DF7F2"
2222 "516F511FB1638F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A"
2223 "8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F"
2224 "0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B"
2225 "570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B57"
2226 "0F4A8F0B570F4A8F0B570F4A8F0B5710591E051CF233A56DEA99087BDC08417F08B6758E"
2227 "E5EA90FCF7B39165D365D139DC60403E8743421AC5E",
2228 "0x1234567890ABCDEF01234567890ABCDEF01234567890ABCDEF01234567890ABCDEF"
2229 "01234567890ABCDEF",
2230 "0x1234567890123456789012345678901234567890123456789012345678901234567890"
2231 "123456789012345678901234567890123456789012345678901234567890123456789012"
2232 "345678901234567890123456789012345678901234567890123456789012345678901234"
2233 "567890123456789012345678901234567890123456789012345678901234567890123456"
2234 "789012345678901234567890123456789012345678901234567890123456789012345678"
2235 "90123456789012345678901234567890",
2236 "0x1234567890ABCDEF01234567890ABCDEF01234567890ABCDEF01234567890ABCDEF"
2237 "01234567890ABCDEE");
2238 }
2239
2240 } // namespace dart
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698