Fabcoin Core  0.16.2
P2P Digital Currency
validat0.cpp
Go to the documentation of this file.
1 // validat0.cpp - written and placed in the public domain by Wei Dai and Jeffrey Walton
2 // Routines in this source file are only tested in Debug builds
3 
4 #include "pch.h"
5 
6 #include "secblock.h"
7 #include "integer.h"
8 #include "zdeflate.h"
9 #include "filters.h"
10 #include "hex.h"
11 #include "asn.h"
12 
13 #include <iostream>
14 #include <iomanip>
15 
16 #include "validate.h"
17 
18 // Aggressive stack checking with VS2005 SP1 and above.
19 #if (CRYPTOPP_MSC_VERSION >= 1410)
20 # pragma strict_gs_check (on)
21 #endif
22 
23 #if CRYPTOPP_GCC_DIAGNOSTIC_AVAILABLE
24 # pragma GCC diagnostic ignored "-Wdeprecated-declarations"
25 #endif
26 
28 
29 #if defined(CRYPTOPP_DEBUG) && !defined(CRYPTOPP_IMPORTS)
30 struct ASN1_TestTuple
31 {
32  int disposition;
33  int identifier;
34  const char* name;
35  const char* data;
36  size_t len;
37 };
38 
39 bool RunASN1TestSet(const ASN1_TestTuple asnTuples[], size_t count)
40 {
41  bool pass=true, fail;
42 
43  // Disposition
44  enum {REJECT=3, ACCEPT=4};
45 
46  for(size_t i=0; i<count; i++)
47  {
48  const ASN1_TestTuple & thisTest = asnTuples[i];
49  ArraySource as1((const byte*)thisTest.data, thisTest.len, true);
50  ArraySource as2((const byte*)thisTest.data, thisTest.len, true);
51 
52  SecByteBlock unused1;
53  std::string unused2;
54  unsigned int unused3;
55  word32 unused4;
56  word64 unused5;
57 
58  // Reporting
59  std::string val;
60  HexEncoder encoder(new StringSink(val));
61  encoder.Put((const byte*)thisTest.data, thisTest.len);
62  encoder.MessageEnd();
63 
64  try
65  {
66  int tag = thisTest.identifier;
67  switch (tag)
68  {
69  case BIT_STRING:
70  BERDecodeBitString(as1, unused1, unused3);
71  break;
72 
73  case OCTET_STRING:
74  BERDecodeOctetString(as1, unused1);
75  break;
76 
77  case INTEGER:
78  BERDecodeUnsigned(as1, unused4);
79  BERDecodeUnsigned<word64>(as2, unused5, byte(INTEGER), 0, W64LIT(0xffffffffffffffff));
80  break;
81 
82  case UTF8_STRING: case PRINTABLE_STRING: case IA5_STRING:
83  BERDecodeTextString(as1, unused2, (byte)tag);
84  break;
85 
86  default:
87  BERGeneralDecoder(as1, (byte)tag);
88  break;
89  }
90 
91  fail = !(thisTest.disposition == ACCEPT);
92  }
93  catch(const Exception&)
94  {
95  fail = !(thisTest.disposition == REJECT);
96  }
97 
98  std::cout << (fail ? "FAILED: " : "passed: ") << (thisTest.disposition == ACCEPT ? "accept " : "reject ");
99  std::cout << asnTuples[i].name << " " << val << "\n";
100  pass = !fail && pass;
101  }
102 
103  return pass;
104 }
105 
106 bool TestASN1Parse()
107 {
108  std::cout << "\nTesting ASN.1 parser...\n\n";
109 
110  bool pass = true;
111 
112  // Disposition
113  enum {REJECT=3, ACCEPT=4};
114 
115  // All the types Crypto++ recognizes.
116  // "C" is one content octet with value 0x43.
117  static const ASN1_TestTuple bitStrings[] =
118  {
119  // The first "\x00" content octet is the "initial octet" representing unused bits. In the
120  // primitive encoding form, there may be zero, one or more contents after the initial octet.
121  {ACCEPT, BIT_STRING, "BIT_STRING", "\x03\x01" "\x00", 3}, // definite length, short form, initial octet, zero subsequent octets
122  {REJECT, BIT_STRING, "BIT_STRING", "\x03\x01" "\x08", 3}, // definite length, short form, initial octet, zero subsequent octets
123  {ACCEPT, BIT_STRING, "BIT_STRING", "\x03\x02" "\x00" "C", 4}, // definite length, short form, expected subsequent octets
124  {REJECT, BIT_STRING, "BIT_STRING", "\x03\x02" "\x08" "C", 4}, // too many unused bits
125  {REJECT, BIT_STRING, "BIT_STRING", "\x03\x7F" "\x00" "C", 4}, // runt or underrun
126  {ACCEPT, BIT_STRING, "BIT_STRING", "\x03\x81\x01" "\x00", 4}, // definite length, long form, initial octet, zero subsequent octets
127  {REJECT, BIT_STRING, "BIT_STRING", "\x03\x81\x01" "\x08", 4}, // definite length, long form, initial octet, zero subsequent octets
128  {ACCEPT, BIT_STRING, "BIT_STRING", "\x03\x81\x02" "\x00" "C", 5}, // definite length, long form
129  {REJECT, BIT_STRING, "BIT_STRING", "\x03\x81\x02" "\x08" "C", 5}, // too many unused bits
130  {REJECT, BIT_STRING, "BIT_STRING", "\x03\x81\xff" "\x00" "C", 5}, // runt or underrun
131  {ACCEPT, BIT_STRING, "BIT_STRING", "\x03\x82\x00\x02" "\x00" "C", 6}, // definite length, long form
132  {REJECT, BIT_STRING, "BIT_STRING", "\x03\x82\x00\x02" "\x08" "C", 6}, // too many unused bits
133  {REJECT, BIT_STRING, "BIT_STRING", "\x03\x82\xff\xff" "\x00" "C", 6}, // runt or underrun
134  {ACCEPT, BIT_STRING, "BIT_STRING", "\x03\x83\x00\x00\x02" "\x00" "C", 7}, // definite length, long form
135  {REJECT, BIT_STRING, "BIT_STRING", "\x03\x83\x00\x00\x02" "\x08" "C", 7}, // too many unused bits
136  {REJECT, BIT_STRING, "BIT_STRING", "\x03\x83\xff\xff\xff" "\x00" "C", 7}, // runt or underrun
137  {ACCEPT, BIT_STRING, "BIT_STRING", "\x03\x84\x00\x00\x00\x02" "\x00" "C", 8}, // definite length, long form
138  {REJECT, BIT_STRING, "BIT_STRING", "\x03\x84\x00\x00\x00\x02" "\x08" "C", 8}, // too many unused bits
139  {REJECT, BIT_STRING, "BIT_STRING", "\x03\x84\xff\xff\xff\xff" "\x00" "C", 8}, // <== Issue 346; requires large allocation
140  };
141 
142  pass = RunASN1TestSet(bitStrings, COUNTOF(bitStrings)) && pass;
143 
144  static const ASN1_TestTuple octetStrings[] =
145  {
146  // In the primitive encoding form, there may be zero, one or more contents.
147  {ACCEPT, OCTET_STRING, "OCTET_STRING", "\x04\x00", 2}, // definite length, short form, zero content octets
148  {ACCEPT, OCTET_STRING, "OCTET_STRING", "\x04\x01" "C", 3}, // definite length, short form, expected content octets
149  {REJECT, OCTET_STRING, "OCTET_STRING", "\x04\x02" "C", 3}, // runt or underrun
150  {REJECT, OCTET_STRING, "OCTET_STRING", "\x04\x7F" "C", 3}, // runt or underrun
151  {ACCEPT, OCTET_STRING, "OCTET_STRING", "\x04\x81\x00", 3}, // definite length, long form, zero content octets
152  {ACCEPT, OCTET_STRING, "OCTET_STRING", "\x04\x81\x01" "C", 4}, // definite length, long form, expected content octets
153  {REJECT, OCTET_STRING, "OCTET_STRING", "\x04\x81\x02" "C", 4}, // runt or underrun
154  {REJECT, OCTET_STRING, "OCTET_STRING", "\x04\x81\xff" "C", 4}, // runt or underrun
155  {ACCEPT, OCTET_STRING, "OCTET_STRING", "\x04\x82\x00\x00", 4}, // definite length, long form, zero content octets
156  {ACCEPT, OCTET_STRING, "OCTET_STRING", "\x04\x82\x00\x01" "C", 5}, // definite length, long form, expected content octets
157  {REJECT, OCTET_STRING, "OCTET_STRING", "\x04\x82\x00\x02" "C", 5}, // runt or underrun
158  {REJECT, OCTET_STRING, "OCTET_STRING", "\x04\x82\xff\xff" "C", 5}, // runt or underrun
159  {ACCEPT, OCTET_STRING, "OCTET_STRING", "\x04\x83\x00\x00\x00", 5}, // definite length, long form, zero content octets
160  {ACCEPT, OCTET_STRING, "OCTET_STRING", "\x04\x83\x00\x00\x01" "C", 6}, // definite length, long form, expected content octets
161  {REJECT, OCTET_STRING, "OCTET_STRING", "\x04\x83\x00\x00\x02" "C", 6}, // runt or underrun
162  {REJECT, OCTET_STRING, "OCTET_STRING", "\x04\x83\xff\xff\xff" "C", 6}, // runt or underrun
163  {ACCEPT, OCTET_STRING, "OCTET_STRING", "\x04\x84\x00\x00\x00\x00", 6}, // definite length, long form, zero content octets
164  {ACCEPT, OCTET_STRING, "OCTET_STRING", "\x04\x84\x00\x00\x00\x01" "C", 7}, // definite length, long form, expected content octets
165  {REJECT, OCTET_STRING, "OCTET_STRING", "\x04\x84\x00\x00\x00\x02" "C", 7}, // runt or underrun
166  {REJECT, OCTET_STRING, "OCTET_STRING", "\x04\x84\xff\xff\xff\xff" "C", 7}, // <== Issue 346; requires large allocation
167  };
168 
169  pass = RunASN1TestSet(octetStrings, COUNTOF(octetStrings)) && pass;
170 
171  static const ASN1_TestTuple utf8Strings[] =
172  {
173  {ACCEPT, UTF8_STRING, "UTF8_STRING", "\x0c\x00", 2}, // definite length, short form, zero content octets
174  {ACCEPT, UTF8_STRING, "UTF8_STRING", "\x0c\x01" "C", 3}, // definite length, short form, expected content octets
175  {REJECT, UTF8_STRING, "UTF8_STRING", "\x0c\x02" "C", 3}, // runt or underrun
176  {REJECT, UTF8_STRING, "UTF8_STRING", "\x0c\x7F" "C", 3}, // runt or underrun
177  {ACCEPT, UTF8_STRING, "UTF8_STRING", "\x0c\x81\x00", 3}, // definite length, long form, zero content octets
178  {ACCEPT, UTF8_STRING, "UTF8_STRING", "\x0c\x81\x01" "C", 4}, // definite length, long form, expected content octets
179  {REJECT, UTF8_STRING, "UTF8_STRING", "\x0c\x81\x02" "C", 4}, // runt or underrun
180  {REJECT, UTF8_STRING, "UTF8_STRING", "\x0c\x81\xff" "C", 4}, // runt or underrun
181  {ACCEPT, UTF8_STRING, "UTF8_STRING", "\x0c\x82\x00\x00", 4}, // definite length, long form, zero content octets
182  {ACCEPT, UTF8_STRING, "UTF8_STRING", "\x0c\x82\x00\x01" "C", 5}, // definite length, long form, expected content octets
183  {REJECT, UTF8_STRING, "UTF8_STRING", "\x0c\x82\x00\x02" "C", 5}, // runt or underrun
184  {REJECT, UTF8_STRING, "UTF8_STRING", "\x0c\x82\xff\xff" "C", 5}, // runt or underrun
185  {ACCEPT, UTF8_STRING, "UTF8_STRING", "\x0c\x83\x00\x00\x00", 5}, // definite length, long form, zero content octets
186  {ACCEPT, UTF8_STRING, "UTF8_STRING", "\x0c\x83\x00\x00\x01" "C", 6}, // definite length, long form, expected content octets
187  {REJECT, UTF8_STRING, "UTF8_STRING", "\x0c\x83\x00\x00\x02" "C", 6}, // runt or underrun
188  {REJECT, UTF8_STRING, "UTF8_STRING", "\x0c\x83\xff\xff\xff" "C", 6}, // runt or underrun
189  {ACCEPT, UTF8_STRING, "UTF8_STRING", "\x0c\x84\x00\x00\x00\x00", 6}, // definite length, long form, zero content octets
190  {ACCEPT, UTF8_STRING, "UTF8_STRING", "\x0c\x84\x00\x00\x00\x01" "C", 7}, // definite length, long form, expected content octets
191  {REJECT, UTF8_STRING, "UTF8_STRING", "\x0c\x84\x00\x00\x00\x02" "C", 7}, // runt or underrun
192  {REJECT, UTF8_STRING, "UTF8_STRING", "\x0c\x84\xff\xff\xff\xff" "C", 7}, // <== Issue 346; requires large allocation
193  };
194 
195  pass = RunASN1TestSet(utf8Strings, COUNTOF(utf8Strings)) && pass;
196 
197  static const ASN1_TestTuple printableStrings[] =
198  {
199  {ACCEPT, PRINTABLE_STRING, "PRINTABLE_STRING", "\x13\x00", 2}, // definite length, short form, zero content octets
200  {ACCEPT, PRINTABLE_STRING, "PRINTABLE_STRING", "\x13\x01" "C", 3}, // definite length, short form, expected content octets
201  {REJECT, PRINTABLE_STRING, "PRINTABLE_STRING", "\x13\x02" "C", 3}, // runt or underrun
202  {REJECT, PRINTABLE_STRING, "PRINTABLE_STRING", "\x13\x7F" "C", 3}, // runt or underrun
203  {ACCEPT, PRINTABLE_STRING, "PRINTABLE_STRING", "\x13\x81\x00", 3}, // definite length, long form, zero content octets
204  {ACCEPT, PRINTABLE_STRING, "PRINTABLE_STRING", "\x13\x81\x01" "C", 4}, // definite length, long form, expected content octets
205  {REJECT, PRINTABLE_STRING, "PRINTABLE_STRING", "\x13\x81\x02" "C", 4}, // runt or underrun
206  {REJECT, PRINTABLE_STRING, "PRINTABLE_STRING", "\x13\x81\xff" "C", 4}, // runt or underrun
207  {ACCEPT, PRINTABLE_STRING, "PRINTABLE_STRING", "\x13\x82\x00\x00", 4}, // definite length, long form, zero content octets
208  {ACCEPT, PRINTABLE_STRING, "PRINTABLE_STRING", "\x13\x82\x00\x01" "C", 5}, // definite length, long form, expected content octets
209  {REJECT, PRINTABLE_STRING, "PRINTABLE_STRING", "\x13\x82\x00\x02" "C", 5}, // runt or underrun
210  {REJECT, PRINTABLE_STRING, "PRINTABLE_STRING", "\x13\x82\xff\xff" "C", 5}, // runt or underrun
211  {ACCEPT, PRINTABLE_STRING, "PRINTABLE_STRING", "\x13\x83\x00\x00\x00", 5}, // definite length, long form, zero content octets
212  {ACCEPT, PRINTABLE_STRING, "PRINTABLE_STRING", "\x13\x83\x00\x00\x01" "C", 6}, // definite length, long form, expected content octets
213  {REJECT, PRINTABLE_STRING, "PRINTABLE_STRING", "\x13\x83\x00\x00\x02" "C", 6}, // runt or underrun
214  {REJECT, PRINTABLE_STRING, "PRINTABLE_STRING", "\x13\x83\xff\xff\xff" "C", 6}, // runt or underrun
215  {ACCEPT, PRINTABLE_STRING, "PRINTABLE_STRING", "\x13\x84\x00\x00\x00\x00", 6}, // definite length, long form, zero content octets
216  {ACCEPT, PRINTABLE_STRING, "PRINTABLE_STRING", "\x13\x84\x00\x00\x00\x01" "C", 7}, // definite length, long form, expected content octets
217  {REJECT, PRINTABLE_STRING, "PRINTABLE_STRING", "\x13\x84\x00\x00\x00\x02" "C", 7}, // runt or underrun
218  {REJECT, PRINTABLE_STRING, "PRINTABLE_STRING", "\x13\x84\xff\xff\xff\xff" "C", 7}, // <== Issue 346; requires large allocation
219  };
220 
221  pass = RunASN1TestSet(printableStrings, COUNTOF(printableStrings)) && pass;
222 
223  static const ASN1_TestTuple ia5Strings[] =
224  {
225  {ACCEPT, IA5_STRING, "IA5_STRING", "\x16\x00", 2}, // definite length, short form, zero content octets
226  {ACCEPT, IA5_STRING, "IA5_STRING", "\x16\x01" "C", 3}, // definite length, short form, expected content octets
227  {REJECT, IA5_STRING, "IA5_STRING", "\x16\x02" "C", 3}, // runt or underrun
228  {REJECT, IA5_STRING, "IA5_STRING", "\x16\x7F" "C", 3}, // runt or underrun
229  {ACCEPT, IA5_STRING, "IA5_STRING", "\x16\x81\x00", 3}, // definite length, long form, zero content octets
230  {ACCEPT, IA5_STRING, "IA5_STRING", "\x16\x81\x01" "C", 4}, // definite length, long form, expected content octets
231  {REJECT, IA5_STRING, "IA5_STRING", "\x16\x81\x02" "C", 4}, // runt or underrun
232  {REJECT, IA5_STRING, "IA5_STRING", "\x16\x81\xff" "C", 4}, // runt or underrun
233  {ACCEPT, IA5_STRING, "IA5_STRING", "\x16\x82\x00\x00", 4}, // definite length, long form, zero content octets
234  {ACCEPT, IA5_STRING, "IA5_STRING", "\x16\x82\x00\x01" "C", 5}, // definite length, long form, expected content octets
235  {REJECT, IA5_STRING, "IA5_STRING", "\x16\x82\x00\x02" "C", 5}, // runt or underrun
236  {REJECT, IA5_STRING, "IA5_STRING", "\x16\x82\xff\xff" "C", 5}, // runt or underrun
237  {ACCEPT, IA5_STRING, "IA5_STRING", "\x16\x83\x00\x00\x00", 5}, // definite length, long form, zero content octets
238  {ACCEPT, IA5_STRING, "IA5_STRING", "\x16\x83\x00\x00\x01" "C", 6}, // definite length, long form, expected content octets
239  {REJECT, IA5_STRING, "IA5_STRING", "\x16\x83\x00\x00\x02" "C", 6}, // runt or underrun
240  {REJECT, IA5_STRING, "IA5_STRING", "\x16\x83\xff\xff\xff" "C", 6}, // runt or underrun
241  {ACCEPT, IA5_STRING, "IA5_STRING", "\x16\x84\x00\x00\x00\x00", 6}, // definite length, long form, zero content octets
242  {ACCEPT, IA5_STRING, "IA5_STRING", "\x16\x84\x00\x00\x00\x01" "C", 7}, // definite length, long form, expected content octets
243  {REJECT, IA5_STRING, "IA5_STRING", "\x16\x84\x00\x00\x00\x02" "C", 7}, // runt or underrun
244  {REJECT, IA5_STRING, "IA5_STRING", "\x16\x84\xff\xff\xff\xff" "C", 7}, // <== Issue 346; requires large allocation
245  };
246 
247  pass = RunASN1TestSet(ia5Strings, COUNTOF(ia5Strings)) && pass;
248 
249  static const ASN1_TestTuple integerValues[] =
250  {
251  // 8.3.1 The encoding of an integer value shall be primitive. The contents octets shall consist of one or more octets.
252  {REJECT, INTEGER, "INTEGER", "\x02\x00", 2}, // definite length, short form, zero content octets
253  {ACCEPT, INTEGER, "INTEGER", "\x02\x01" "C", 3}, // definite length, short form, expected content octets
254  {REJECT, INTEGER, "INTEGER", "\x02\x02" "C", 3}, // runt or underrun
255  {REJECT, INTEGER, "INTEGER", "\x02\x7F" "C", 3}, // runt or underrun
256  {REJECT, INTEGER, "INTEGER", "\x02\x81\x00", 3}, // definite length, long form, zero content octets
257  {ACCEPT, INTEGER, "INTEGER", "\x02\x81\x01" "C", 4}, // definite length, long form, expected content octets
258  {REJECT, INTEGER, "INTEGER", "\x02\x81\x02" "C", 4}, // runt or underrun
259  {REJECT, INTEGER, "INTEGER", "\x02\x81\xff" "C", 4}, // runt or underrun
260  {REJECT, INTEGER, "INTEGER", "\x02\x82\x00\x00", 4}, // definite length, long form, zero content octets
261  {ACCEPT, INTEGER, "INTEGER", "\x02\x82\x00\x01" "C", 5}, // definite length, long form, expected content octets
262  {REJECT, INTEGER, "INTEGER", "\x02\x82\x00\x02" "C", 5}, // runt or underrun
263  {REJECT, INTEGER, "INTEGER", "\x02\x82\xff\xff" "C", 5}, // runt or underrun
264  {REJECT, INTEGER, "INTEGER", "\x02\x83\x00\x00\x00", 5}, // definite length, long form, zero content octets
265  {ACCEPT, INTEGER, "INTEGER", "\x02\x83\x00\x00\x01" "C", 6}, // definite length, long form, expected content octets
266  {REJECT, INTEGER, "INTEGER", "\x02\x83\x00\x00\x02" "C", 6}, // runt or underrun
267  {REJECT, INTEGER, "INTEGER", "\x02\x83\xff\xff\xff" "C", 6}, // runt or underrun
268  {REJECT, INTEGER, "INTEGER", "\x02\x84\x00\x00\x00\x00", 6}, // definite length, long form, zero content octets
269  {ACCEPT, INTEGER, "INTEGER", "\x02\x84\x00\x00\x00\x01" "C", 7}, // definite length, long form, expected content octets
270  {REJECT, INTEGER, "INTEGER", "\x02\x84\x00\x00\x00\x02" "C", 7}, // runt or underrun
271  {REJECT, INTEGER, "INTEGER", "\x02\x84\xff\xff\xff\xff" "C", 7}, // <== Issue 346; requires large allocation
272  };
273 
274  pass = RunASN1TestSet(integerValues, COUNTOF(integerValues)) && pass;
275 
276  return pass;
277 }
278 #endif
279 
280 #if defined(CRYPTOPP_DEBUG) && !defined(CRYPTOPP_IMPORTS)
281 bool TestSecBlock()
282 {
283  std::cout << "\nTesting SecBlock...\n\n";
284 
285  bool pass1=true, pass2=true, pass3=true, pass4=true, pass5=true, pass6=true, pass7=true, temp=false;
286 
287  //********** Zeroized block **********//
288 
289  {
290  // NULL ptr with a size means to create a new SecBlock with all elements zero'd
291  SecByteBlock z1(NULL, 256);
292  temp = true;
293 
294  for (size_t i = 0; i < z1.size(); i++)
295  temp &= (z1[i] == 0);
296 
297  pass1 &= temp;
298  if (!temp)
299  std::cout << "FAILED:";
300  else
301  std::cout << "passed:";
302  std::cout << " Zeroized byte array" << std::endl;
303 
304  SecBlock<word32> z2(NULL, 256);
305  temp = true;
306 
307  for (size_t i = 0; i < z2.size(); i++)
308  temp &= (z2[i] == 0);
309 
310  pass1 &= temp;
311  if (!temp)
312  std::cout << "FAILED:";
313  else
314  std::cout << "passed:";
315  std::cout << " Zeroized word32 array" << std::endl;
316 
317  SecBlock<word64> z3(NULL, 256);
318  temp = true;
319 
320  for (size_t i = 0; i < z3.size(); i++)
321  temp &= (z3[i] == 0);
322 
323  pass1 &= temp;
324  if (!temp)
325  std::cout << "FAILED:";
326  else
327  std::cout << "passed:";
328  std::cout << " Zeroized word64 array" << std::endl;
329 
330 #if defined(CRYPTOPP_WORD128_AVAILABLE)
331  SecBlock<word128> z4(NULL, 256);
332  temp = true;
333 
334  for (size_t i = 0; i < z4.size(); i++)
335  temp &= (z4[i] == 0);
336 
337  pass1 &= temp;
338  if (!temp)
339  std::cout << "FAILED:";
340  else
341  std::cout << "passed:";
342  std::cout << " Zeroized word128 array" << std::endl;
343 #endif
344  }
345 
346  //********** Assign **********//
347 
348  try
349  {
350  SecByteBlock a, b;
351  temp = true;
352 
353  a.Assign((const byte*)"a", 1);
354  b.Assign((const byte*)"b", 1);
355 
356  temp &= (a.SizeInBytes() == 1);
357  temp &= (b.SizeInBytes() == 1);
358  temp &= (a[0] == 'a');
359  temp &= (b[0] == 'b');
360 
361  a.Assign((const byte*)"ab", 2);
362  b.Assign((const byte*)"cd", 2);
363 
364  temp &= (a.SizeInBytes() == 2);
365  temp &= (b.SizeInBytes() == 2);
366  temp &= (a[0] == 'a' && a[1] == 'b');
367  temp &= (b[0] == 'c' && b[1] == 'd');
368  }
369  catch(const Exception& /*ex*/)
370  {
371  temp = false;
372  }
373 
374  pass2 &= temp;
375  if (!temp)
376  std::cout << "FAILED:";
377  else
378  std::cout << "passed:";
379  std::cout << " Assign byte" << std::endl;
380 
381  try
382  {
384  temp = true;
385 
386  word32 one[1] = {1}, two[1] = {2};
387  a.Assign(one, 1);
388  b.Assign(two, 1);
389 
390  temp &= (a.SizeInBytes() == 4);
391  temp &= (b.SizeInBytes() == 4);
392  temp &= (a[0] == 1);
393  temp &= (b[0] == 2);
394 
395  word32 three[2] = {1,2}, four[2] = {3,4};
396  a.Assign(three, 2);
397  b.Assign(four, 2);
398 
399  temp &= (a.SizeInBytes() == 8);
400  temp &= (b.SizeInBytes() == 8);
401  temp &= (a[0] == 1 && a[1] == 2);
402  temp &= (b[0] == 3 && b[1] == 4);
403  }
404  catch(const Exception& /*ex*/)
405  {
406  temp = false;
407  }
408 
409  pass2 &= temp;
410  if (!temp)
411  std::cout << "FAILED:";
412  else
413  std::cout << "passed:";
414  std::cout << " Assign word32" << std::endl;
415 
416  try
417  {
419  temp = true;
420 
421  word64 one[1] = {1}, two[1] = {2};
422  a.Assign(one, 1);
423  b.Assign(two, 1);
424 
425  temp &= (a.SizeInBytes() == 8);
426  temp &= (b.SizeInBytes() == 8);
427  temp &= (a[0] == 1);
428  temp &= (b[0] == 2);
429 
430  word64 three[2] = {1,2}, four[2] = {3,4};
431  a.Assign(three, 2);
432  b.Assign(four, 2);
433 
434  temp &= (a.SizeInBytes() == 16);
435  temp &= (b.SizeInBytes() == 16);
436  temp &= (a[0] == 1 && a[1] == 2);
437  temp &= (b[0] == 3 && b[1] == 4);
438  }
439  catch(const Exception& /*ex*/)
440  {
441  temp = false;
442  }
443 
444  pass2 &= temp;
445  if (!temp)
446  std::cout << "FAILED:";
447  else
448  std::cout << "passed:";
449  std::cout << " Assign word64" << std::endl;
450 
451 #if defined(CRYPTOPP_WORD128_AVAILABLE)
452  try
453  {
455  temp = true;
456 
457  word128 one[1] = {1}, two[1] = {2};
458  a.Assign(one, 1);
459  b.Assign(two, 1);
460 
461  temp &= (a.SizeInBytes() == 16);
462  temp &= (b.SizeInBytes() == 16);
463  temp &= (a[0] == 1);
464  temp &= (b[0] == 2);
465 
466  word128 three[2] = {1,2}, four[2] = {3,4};
467  a.Assign(three, 2);
468  b.Assign(four, 2);
469 
470  temp &= (a.SizeInBytes() == 32);
471  temp &= (b.SizeInBytes() == 32);
472  temp &= (a[0] == 1 && a[1] == 2);
473  temp &= (b[0] == 3 && b[1] == 4);
474  }
475  catch(const Exception& /*ex*/)
476  {
477  temp = false;
478  }
479 
480  pass2 &= temp;
481  if (!temp)
482  std::cout << "FAILED:";
483  else
484  std::cout << "passed:";
485  std::cout << " Assign word128" << std::endl;
486 #endif
487 
488  //********** Append **********//
489 
490  try
491  {
492  SecByteBlock a, b;
493  temp = true;
494 
495  a.Assign((const byte*)"a", 1);
496  b.Assign((const byte*)"b", 1);
497 
498  a += b;
499  temp &= (a.SizeInBytes() == 2);
500  temp &= (a[0] == 'a' && a[1] == 'b');
501 
502  a.Assign((const byte*)"ab", 2);
503  b.Assign((const byte*)"cd", 2);
504 
505  a += b;
506  temp &= (a.SizeInBytes() == 4);
507  temp &= (a[0] == 'a' && a[1] == 'b' && a[2] == 'c' && a[3] == 'd');
508 
509  a.Assign((const byte*)"a", 1);
510 
511  a += a;
512  temp &= (a.SizeInBytes() == 2);
513  temp &= (a[0] == 'a' && a[1] == 'a');
514 
515  a.Assign((const byte*)"ab", 2);
516 
517  a += a;
518  temp &= (a.SizeInBytes() == 4);
519  temp &= (a[0] == 'a' && a[1] == 'b' && a[2] == 'a' && a[3] == 'b');
520  }
521  catch(const Exception& /*ex*/)
522  {
523  temp = false;
524  }
525 
526  pass3 &= temp;
527  if (!temp)
528  std::cout << "FAILED:";
529  else
530  std::cout << "passed:";
531  std::cout << " Append byte" << std::endl;
532 
533  try
534  {
536  temp = true;
537 
538  const word32 one[1] = {1}, two[1] = {2};
539  a.Assign(one, 1);
540  b.Assign(two, 1);
541 
542  a += b;
543  temp &= (a.SizeInBytes() == 8);
544  temp &= (a[0] == 1 && a[1] == 2);
545 
546  const word32 three[2] = {1,2}, four[2] = {3,4};
547  a.Assign(three, 2);
548  b.Assign(four, 2);
549 
550  a += b;
551  temp &= (a.SizeInBytes() == 16);
552  temp &= (a[0] == 1 && a[1] == 2 && a[2] == 3 && a[3] == 4);
553 
554  a.Assign(one, 1);
555 
556  a += a;
557  temp &= (a.SizeInBytes() == 8);
558  temp &= (a[0] == 1 && a[1] == 1);
559 
560  a.Assign(three, 2);
561 
562  a += a;
563  temp &= (a.SizeInBytes() == 16);
564  temp &= (a[0] == 1 && a[1] == 2 && a[2] == 1 && a[3] == 2);
565  }
566  catch(const Exception& /*ex*/)
567  {
568  temp = false;
569  }
570 
571  pass3 &= temp;
572  if (!temp)
573  std::cout << "FAILED:";
574  else
575  std::cout << "passed:";
576  std::cout << " Append word32" << std::endl;
577 
578  try
579  {
581  temp = true;
582 
583  const word64 one[1] = {1}, two[1] = {2};
584  a.Assign(one, 1);
585  b.Assign(two, 1);
586 
587  a += b;
588  temp &= (a.SizeInBytes() == 16);
589  temp &= (a[0] == 1 && a[1] == 2);
590 
591  const word64 three[2] = {1,2}, four[2] = {3,4};
592  a.Assign(three, 2);
593  b.Assign(four, 2);
594 
595  a += b;
596  temp &= (a.SizeInBytes() == 32);
597  temp &= (a[0] == 1 && a[1] == 2 && a[2] == 3 && a[3] == 4);
598 
599  a.Assign(one, 1);
600 
601  a += a;
602  temp &= (a.SizeInBytes() == 16);
603  temp &= (a[0] == 1 && a[1] == 1);
604 
605  a.Assign(three, 2);
606 
607  a += a;
608  temp &= (a.SizeInBytes() == 32);
609  temp &= (a[0] == 1 && a[1] == 2 && a[2] == 1 && a[3] == 2);
610  }
611  catch(const Exception& /*ex*/)
612  {
613  temp = false;
614  }
615 
616  pass3 &= temp;
617  if (!temp)
618  std::cout << "FAILED:";
619  else
620  std::cout << "passed:";
621  std::cout << " Append word64" << std::endl;
622 
623 #if defined(CRYPTOPP_WORD128_AVAILABLE)
624  try
625  {
627  temp = true;
628 
629  const word128 one[1] = {1}, two[1] = {2};
630  a.Assign(one, 1);
631  b.Assign(two, 1);
632 
633  a += b;
634  temp &= (a.SizeInBytes() == 32);
635  temp &= (a[0] == 1 && a[1] == 2);
636 
637  const word128 three[2] = {1,2}, four[2] = {3,4};
638  a.Assign(three, 2);
639  b.Assign(four, 2);
640 
641  a += b;
642  temp &= (a.SizeInBytes() == 64);
643  temp &= (a[0] == 1 && a[1] == 2 && a[2] == 3 && a[3] == 4);
644 
645  a.Assign(one, 1);
646 
647  a += a;
648  temp &= (a.SizeInBytes() == 32);
649  temp &= (a[0] == 1 && a[1] == 1);
650 
651  a.Assign(three, 2);
652 
653  a += a;
654  temp &= (a.SizeInBytes() == 64);
655  temp &= (a[0] == 1 && a[1] == 2 && a[2] == 1 && a[3] == 2);
656  }
657  catch(const Exception& /*ex*/)
658  {
659  temp = false;
660  }
661 
662  pass3 &= temp;
663  if (!temp)
664  std::cout << "FAILED:";
665  else
666  std::cout << "passed:";
667  std::cout << " Append word128" << std::endl;
668 #endif
669 
670  //********** Concatenate **********//
671 
672  // byte
673  try
674  {
675  SecByteBlock a, b, c;
676  temp = true;
677 
678  a.Assign((const byte*)"a", 1);
679  b.Assign((const byte*)"b", 1);
680 
681  c = a + b;
682  temp &= (a[0] == 'a');
683  temp &= (b[0] == 'b');
684  temp &= (c.SizeInBytes() == 2);
685  temp &= (c[0] == 'a' && c[1] == 'b');
686 
687  a.Assign((const byte*)"ab", 2);
688  b.Assign((const byte*)"cd", 2);
689 
690  c = a + b;
691  temp &= (a[0] == 'a' && a[1] == 'b');
692  temp &= (b[0] == 'c' && b[1] == 'd');
693  temp &= (c.SizeInBytes() == 4);
694  temp &= (c[0] == 'a' && c[1] == 'b' && c[2] == 'c' && c[3] == 'd');
695  }
696  catch(const Exception& /*ex*/)
697  {
698  temp = false;
699  }
700 
701  pass4 &= temp;
702  if (!temp)
703  std::cout << "FAILED:";
704  else
705  std::cout << "passed:";
706  std::cout << " Concatenate byte" << std::endl;
707 
708  // word32
709  try
710  {
711  SecBlock<word32> a, b, c;
712  temp = true;
713 
714  const word32 one[1] = {1}, two[1] = {2};
715  a.Assign(one, 1);
716  b.Assign(two, 1);
717 
718  c = a + b;
719  temp &= (a[0] == 1);
720  temp &= (b[0] == 2);
721  temp &= (c.SizeInBytes() == 8);
722  temp &= (c[0] == 1 && c[1] == 2);
723 
724  const word32 three[2] = {1,2}, four[2] = {3,4};
725  a.Assign(three, 2);
726  b.Assign(four, 2);
727 
728  c = a + b;
729  temp &= (a[0] == 1 && a[1] == 2);
730  temp &= (b[0] == 3 && b[1] == 4);
731  temp &= (c.SizeInBytes() == 16);
732  temp &= (c[0] == 1 && c[1] == 2 && c[2] == 3 && c[3] == 4);
733  }
734  catch(const Exception& /*ex*/)
735  {
736  temp = false;
737  }
738 
739  pass4 &= temp;
740  if (!temp)
741  std::cout << "FAILED:";
742  else
743  std::cout << "passed:";
744  std::cout << " Concatenate word32" << std::endl;
745 
746  // word64
747  try
748  {
749  SecBlock<word64> a, b, c;
750  temp = true;
751 
752  const word64 one[1] = {1}, two[1] = {2};
753  a.Assign(one, 1);
754  b.Assign(two, 1);
755 
756  c = a + b;
757  temp &= (a[0] == 1);
758  temp &= (b[0] == 2);
759  temp &= (c.SizeInBytes() == 16);
760  temp &= (c[0] == 1 && c[1] == 2);
761 
762  const word64 three[2] = {1,2}, four[2] = {3,4};
763  a.Assign(three, 2);
764  b.Assign(four, 2);
765 
766  c = a + b;
767  temp &= (a[0] == 1 && a[1] == 2);
768  temp &= (b[0] == 3 && b[1] == 4);
769  temp &= (c.SizeInBytes() == 32);
770  temp &= (c[0] == 1 && c[1] == 2 && c[2] == 3 && c[3] == 4);
771  }
772  catch(const Exception& /*ex*/)
773  {
774  temp = false;
775  }
776 
777  pass4 &= temp;
778  if (!temp)
779  std::cout << "FAILED:";
780  else
781  std::cout << "passed:";
782  std::cout << " Concatenate word64" << std::endl;
783 
784 #if defined(CRYPTOPP_WORD128_AVAILABLE)
785  try
786  {
788  temp = true;
789 
790  const word128 one[1] = {1}, two[1] = {2};
791  a.Assign(one, 1);
792  b.Assign(two, 1);
793 
794  c = a + b;
795  temp &= (a[0] == 1);
796  temp &= (b[0] == 2);
797  temp &= (c.SizeInBytes() == 32);
798  temp &= (c[0] == 1 && c[1] == 2);
799 
800  const word128 three[2] = {1,2}, four[2] = {3,4};
801  a.Assign(three, 2);
802  b.Assign(four, 2);
803 
804  c = a + b;
805  temp &= (a[0] == 1 && a[1] == 2);
806  temp &= (b[0] == 3 && b[1] == 4);
807  temp &= (c.SizeInBytes() == 64);
808  temp &= (c[0] == 1 && c[1] == 2 && c[2] == 3 && c[3] == 4);
809  }
810  catch(const Exception& /*ex*/)
811  {
812  temp = false;
813  }
814 
815  pass4 &= temp;
816  if (!temp)
817  std::cout << "FAILED:";
818  else
819  std::cout << "passed:";
820  std::cout << " Concatenate word128" << std::endl;
821 #endif
822 
823  //********** Equality **********//
824 
825  // byte
826  try
827  {
828  static const byte str1[] = "abcdefghijklmnopqrstuvwxyz";
829  static const byte str2[] = "zyxwvutsrqponmlkjihgfedcba";
830  static const byte str3[] = "0123456789";
831 
832  temp = true;
833  SecByteBlock a,b;
834 
835  a.Assign(str1, COUNTOF(str1));
836  b.Assign(str1, COUNTOF(str1));
837  temp &= (a.operator==(b));
838 
839  a.Assign(str3, COUNTOF(str3));
840  b.Assign(str3, COUNTOF(str3));
841  temp &= (a == b);
842 
843  a.Assign(str1, COUNTOF(str1));
844  b.Assign(str2, COUNTOF(str2));
845  temp &= (a.operator!=(b));
846 
847  a.Assign(str1, COUNTOF(str1));
848  b.Assign(str3, COUNTOF(str3));
849  temp &= (a != b);
850  }
851  catch(const Exception& /*ex*/)
852  {
853  temp = false;
854  }
855 
856  pass5 &= temp;
857  if (!temp)
858  std::cout << "FAILED:";
859  else
860  std::cout << "passed:";
861  std::cout << " Equality byte" << std::endl;
862 
863  // word32
864  try
865  {
866  static const word32 str1[] = {2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97};
867  static const word32 str2[] = {97,89,83,79,73,71,67,61,59,53,47,43,41,37,31,29,23,19,17,13,11,7,5,3,2};
868  static const word32 str3[] = {0,1,2,3,4,5,6,7,8,9};
869 
870  temp = true;
872 
873  a.Assign(str1, COUNTOF(str1));
874  b.Assign(str1, COUNTOF(str1));
875  temp &= (a.operator==(b));
876 
877  a.Assign(str3, COUNTOF(str3));
878  b.Assign(str3, COUNTOF(str3));
879  temp &= (a == b);
880 
881  a.Assign(str1, COUNTOF(str1));
882  b.Assign(str2, COUNTOF(str2));
883  temp &= (a.operator!=(b));
884 
885  a.Assign(str1, COUNTOF(str1));
886  b.Assign(str3, COUNTOF(str3));
887  temp &= (a != b);
888  }
889  catch(const Exception& /*ex*/)
890  {
891  temp = false;
892  }
893 
894  pass5 &= temp;
895  if (!temp)
896  std::cout << "FAILED:";
897  else
898  std::cout << "passed:";
899  std::cout << " Equality word32" << std::endl;
900 
901  // word64
902  try
903  {
904  static const word64 str1[] = {2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97};
905  static const word64 str2[] = {97,89,83,79,73,71,67,61,59,53,47,43,41,37,31,29,23,19,17,13,11,7,5,3,2};
906  static const word64 str3[] = {0,1,2,3,4,5,6,7,8,9};
907 
908  temp = true;
910 
911  a.Assign(str1, COUNTOF(str1));
912  b.Assign(str1, COUNTOF(str1));
913  temp &= (a.operator==(b));
914 
915  a.Assign(str3, COUNTOF(str3));
916  b.Assign(str3, COUNTOF(str3));
917  temp &= (a == b);
918 
919  a.Assign(str1, COUNTOF(str1));
920  b.Assign(str2, COUNTOF(str2));
921  temp &= (a.operator!=(b));
922 
923  a.Assign(str1, COUNTOF(str1));
924  b.Assign(str3, COUNTOF(str3));
925  temp &= (a != b);
926  }
927  catch(const Exception& /*ex*/)
928  {
929  temp = false;
930  }
931 
932  pass5 &= temp;
933  if (!temp)
934  std::cout << "FAILED:";
935  else
936  std::cout << "passed:";
937  std::cout << " Equality word64" << std::endl;
938 
939 #if defined(CRYPTOPP_WORD128_AVAILABLE)
940  // word128
941  try
942  {
943  static const word128 str1[] = {2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97};
944  static const word128 str2[] = {97,89,83,79,73,71,67,61,59,53,47,43,41,37,31,29,23,19,17,13,11,7,5,3,2};
945  static const word128 str3[] = {0,1,2,3,4,5,6,7,8,9};
946 
947  temp = true;
949 
950  a.Assign(str1, COUNTOF(str1));
951  b.Assign(str1, COUNTOF(str1));
952  temp &= (a.operator==(b));
953 
954  a.Assign(str3, COUNTOF(str3));
955  b.Assign(str3, COUNTOF(str3));
956  temp &= (a == b);
957 
958  a.Assign(str1, COUNTOF(str1));
959  b.Assign(str2, COUNTOF(str2));
960  temp &= (a.operator!=(b));
961 
962  a.Assign(str1, COUNTOF(str1));
963  b.Assign(str3, COUNTOF(str3));
964  temp &= (a != b);
965  }
966  catch(const Exception& /*ex*/)
967  {
968  temp = false;
969  }
970 
971  pass5 &= temp;
972  if (!temp)
973  std::cout << "FAILED:";
974  else
975  std::cout << "passed:";
976  std::cout << " Equality word128" << std::endl;
977 #endif
978 
979  //********** Allocator Size/Overflow **********//
980 
981  try
982  {
983  temp = false;
984 
986  const size_t max = A.max_size();
987  SecBlock<word32> t(max+1);
988  }
989  catch(const Exception& /*ex*/)
990  {
991  temp = true;
992  }
993  catch(const std::exception& /*ex*/)
994  {
995  temp = true;
996  }
997 
998  pass6 &= temp;
999  if (!temp)
1000  std::cout << "FAILED:";
1001  else
1002  std::cout << "passed:";
1003  std::cout << " Overflow word32" << std::endl;
1004 
1005  try
1006  {
1007  temp = false;
1008 
1010  const size_t max = A.max_size();
1011  SecBlock<word64> t(max+1);
1012  }
1013  catch(const Exception& /*ex*/)
1014  {
1015  temp = true;
1016  }
1017  catch(const std::exception& /*ex*/)
1018  {
1019  temp = true;
1020  }
1021 
1022  pass6 &= temp;
1023  if (!temp)
1024  std::cout << "FAILED:";
1025  else
1026  std::cout << "passed:";
1027  std::cout << " Overflow word64" << std::endl;
1028 
1029 #if defined(CRYPTOPP_WORD128_AVAILABLE)
1030  try
1031  {
1032  temp = false;
1033 
1035  const size_t max = A.max_size();
1036  SecBlock<word128> t(max+1);
1037  }
1038  catch(const Exception& /*ex*/)
1039  {
1040  temp = true;
1041  }
1042  catch(const std::exception& /*ex*/)
1043  {
1044  temp = true;
1045  }
1046 
1047  pass6 &= temp;
1048  if (!temp)
1049  std::cout << "FAILED:";
1050  else
1051  std::cout << "passed:";
1052  std::cout << " Overflow word128" << std::endl;
1053 #endif
1054 
1055  //********** FixedSizeAllocatorWithCleanup and Grow **********//
1056 
1057  // byte
1058  try
1059  {
1060  static const unsigned int SIZE = 8;
1061  SecBlockWithHint<byte, SIZE> block(SIZE);
1062  memset(block, 0xaa, block.SizeInBytes());
1063 
1064  temp = true;
1065  block.CleanGrow(SIZE*2);
1066  temp &= (block.size() == SIZE*2);
1067 
1068  for (size_t i = 0; i < block.size()/2; i++)
1069  temp &= (block[i] == 0xaa);
1070  for (size_t i = block.size()/2; i < block.size(); i++)
1071  temp &= (block[i] == 0);
1072 
1073  block.CleanNew(SIZE*4);
1074  temp &= (block.size() == SIZE*4);
1075  for (size_t i = 0; i < block.size(); i++)
1076  temp &= (block[i] == 0);
1077  }
1078  catch(const Exception& /*ex*/)
1079  {
1080  temp = false;
1081  }
1082  catch(const std::exception& /*ex*/)
1083  {
1084  temp = false;
1085  }
1086 
1087  pass7 &= temp;
1088  if (!temp)
1089  std::cout << "FAILED:";
1090  else
1091  std::cout << "passed:";
1092  std::cout << " FixedSizeAllocator Grow with byte" << std::endl;
1093 
1094  // word32
1095  try
1096  {
1097  static const unsigned int SIZE = 8;
1098  SecBlockWithHint<word32, SIZE> block(SIZE);
1099  memset(block, 0xaa, block.SizeInBytes());
1100 
1101  temp = true;
1102  block.CleanGrow(SIZE*2);
1103  temp &= (block.size() == SIZE*2);
1104 
1105  for (size_t i = 0; i < block.size()/2; i++)
1106  temp &= (block[i] == 0xaaaaaaaa);
1107 
1108  for (size_t i = block.size()/2; i < block.size(); i++)
1109  temp &= (block[i] == 0);
1110 
1111  block.CleanNew(SIZE*4);
1112  temp &= (block.size() == SIZE*4);
1113  for (size_t i = 0; i < block.size(); i++)
1114  temp &= (block[i] == 0);
1115  }
1116  catch(const Exception& /*ex*/)
1117  {
1118  temp = false;
1119  }
1120  catch(const std::exception& /*ex*/)
1121  {
1122  temp = false;
1123  }
1124 
1125  pass7 &= temp;
1126  if (!temp)
1127  std::cout << "FAILED:";
1128  else
1129  std::cout << "passed:";
1130  std::cout << " FixedSizeAllocator Grow with word32" << std::endl;
1131 
1132  // word64
1133  try
1134  {
1135  static const unsigned int SIZE = 8;
1136  SecBlockWithHint<word64, SIZE> block(SIZE);
1137  memset(block, 0xaa, block.SizeInBytes());
1138 
1139  temp = true;
1140  block.CleanGrow(SIZE*2);
1141  temp &= (block.size() == SIZE*2);
1142 
1143  for (size_t i = 0; i < block.size()/2; i++)
1144  temp &= (block[i] == W64LIT(0xaaaaaaaaaaaaaaaa));
1145 
1146  for (size_t i = block.size()/2; i < block.size(); i++)
1147  temp &= (block[i] == 0);
1148 
1149  block.CleanNew(SIZE*4);
1150  temp &= (block.size() == SIZE*4);
1151  for (size_t i = 0; i < block.size(); i++)
1152  temp &= (block[i] == 0);
1153  }
1154  catch(const Exception& /*ex*/)
1155  {
1156  temp = false;
1157  }
1158  catch(const std::exception& /*ex*/)
1159  {
1160  temp = false;
1161  }
1162 
1163  pass7 &= temp;
1164  if (!temp)
1165  std::cout << "FAILED:";
1166  else
1167  std::cout << "passed:";
1168  std::cout << " FixedSizeAllocator Grow with word64" << std::endl;
1169 
1170 #if defined(CRYPTOPP_WORD128_AVAILABLE)
1171  // word128
1172  try
1173  {
1174  static const unsigned int SIZE = 8;
1176  memset(block, 0xaa, block.SizeInBytes());
1177 
1178  temp = true;
1179  block.CleanGrow(SIZE*2);
1180  temp &= (block.size() == SIZE*2);
1181 
1182  for (size_t i = 0; i < block.size()/2; i++)
1183  temp &= (block[i] == (((word128)W64LIT(0xaaaaaaaaaaaaaaaa) << 64U) | W64LIT(0xaaaaaaaaaaaaaaaa)));
1184 
1185  for (size_t i = block.size()/2; i < block.size(); i++)
1186  temp &= (block[i] == 0);
1187 
1188  block.CleanNew(SIZE*4);
1189  temp &= (block.size() == SIZE*4);
1190  for (size_t i = 0; i < block.size(); i++)
1191  temp &= (block[i] == 0);
1192  }
1193  catch(const Exception& /*ex*/)
1194  {
1195  temp = false;
1196  }
1197  catch(const std::exception& /*ex*/)
1198  {
1199  temp = false;
1200  }
1201 
1202  pass7 &= temp;
1203  if (!temp)
1204  std::cout << "FAILED:";
1205  else
1206  std::cout << "passed:";
1207  std::cout << " FixedSizeAllocator Grow with word128" << std::endl;
1208 #endif
1209 
1210  return pass1 && pass2 && pass3 && pass4 && pass5 && pass6 && pass7;
1211 }
1212 #endif
1213 
1214 #if defined(CRYPTOPP_DEBUG) && !defined(CRYPTOPP_IMPORTS)
1215 bool TestHuffmanCodes()
1216 {
1217  std::cout << "\nTesting Huffman codes...\n\n";
1218  bool pass=true;
1219 
1220  static const size_t nCodes = 30;
1221  const unsigned int codeCounts[nCodes] = {
1222  1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1223  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1224  0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
1225 
1226  static const unsigned int maxCodeBits = nCodes >> 1;
1227  unsigned int codeBits[nCodes] = {
1228  ~0u, ~0u, ~0u, ~0u, ~0u,
1229  ~0u, ~0u, ~0u, ~0u, ~0u,
1230  ~0u, ~0u, ~0u, ~0u, ~0u,
1231  };
1232 
1233  try
1234  {
1235  HuffmanEncoder::GenerateCodeLengths(codeBits, maxCodeBits, codeCounts, nCodes);
1236  }
1237  catch(const Exception& /*ex*/)
1238  {
1239  pass=false;
1240  }
1241 
1242  if (!pass)
1243  std::cout << "FAILED:";
1244  else
1245  std::cout << "passed:";
1246  std::cout << " GenerateCodeLengths" << std::endl;
1247 
1248  return pass;
1249 }
1250 #endif
1251 
1252 #if defined(CRYPTOPP_DEBUG) && !defined(CRYPTOPP_IMPORTS)
1253 bool TestIntegerBitops()
1254 {
1255  std::cout << "\nTesting Integer bitops...\n\n";
1256 
1257  struct Bitops_TestTuple
1258  {
1259  // m,n are operands; a,o,x are and,or,xor results
1260  const char *m, *n, *a, *o, *x;
1261  };
1262  static const Bitops_TestTuple tests[] = {
1263  {
1264  "0xc2cea8a4", "0xb36e5794", "0x824e0084", "0xf3eeffb4", "0x71a0ff30"
1265  },
1266  {
1267  "0x436eb828", "0x1b375cb4", "0x3261820", "0x5b7ffcbc", "0x5859e49c"
1268  },
1269  {
1270  "0x1e5c0b28", "0x4fded465", "0xe5c0020", "0x5fdedf6d", "0x5182df4d"
1271  },
1272  {
1273  "0xeb71fde7", "0xf7bb47cf", "0xe33145c7", "0xfffbffef", "0x1ccaba28"
1274  },
1275  {
1276  "0xa6b0f01f", "0x8a8ca98", "0xa0c018", "0xaeb8fa9f", "0xae183a87"
1277  },
1278  {
1279  "0xa70bd8b7", "0x5c758cf5", "0x40188b5", "0xff7fdcf7", "0xfb7e5442"
1280  },
1281  {
1282  "0xf91af382", "0x718a9995", "0x710a9180", "0xf99afb97", "0x88906a17"
1283  },
1284  {
1285  "0xbd2a76ad", "0xddd8dfeb", "0x9d0856a9", "0xfdfaffef", "0x60f2a946"
1286  },
1287  {
1288  "0xd4b559cc", "0x91a53295", "0x90a51084", "0xd5b57bdd", "0x45106b59"
1289  },
1290  {
1291  "0x89434e9e", "0xa42fdaf9", "0x80034a98", "0xad6fdeff", "0x2d6c9467"
1292  },
1293  {
1294  "0xb947ac04", "0xd4201e52", "0x90000c00", "0xfd67be56", "0x6d67b256"
1295  },
1296  {
1297  "0xa83945c1", "0x3a9c5dba", "0x28184580", "0xbabd5dfb", "0x92a5187b"
1298  },
1299  {
1300  "0xbca38ffa", "0x881ba9fd", "0x880389f8", "0xbcbbafff", "0x34b82607"
1301  },
1302  {
1303  "0xfcd0b92", "0xeaad8534", "0xa8d0110", "0xefed8fb6", "0xe5608ea6"
1304  },
1305  {
1306  "0x50d160d0", "0x64646f75", "0x40406050", "0x74f56ff5", "0x34b50fa5"
1307  },
1308  {
1309  "0x165ccff8", "0x67d49127", "0x6548120", "0x77dcdfff", "0x71885edf"
1310  },
1311  {
1312  "0x8c4f4bbb7adaacb5", "0x2566b7a909b24aa9", "0x44603a9089208a1", "0xad6fffbb7bfaeebd", "0xa929fc127368e61c"
1313  },
1314  {
1315  "0x6f9ef50aafb31e8d", "0x7a93b2ccd1bbbff2", "0x6a92b00881b31e80", "0x7f9ff7ceffbbbfff", "0x150d47c67e08a17f"
1316  },
1317  {
1318  "0x4c99e967f8de5294", "0x1f4699e0c14e6974", "0xc008960c04e4014", "0x5fdff9e7f9de7bf4", "0x53df708739903be0"
1319  },
1320  {
1321  "0xcc55f5d6d3ea45c", "0x6805b4ddb6390c2f", "0x805145d2438040c", "0x6cc5ffddff3fac7f", "0x64c0eb80db07a873"
1322  },
1323  {
1324  "0x90620d1a012459e7", "0x89d31098ce3fed42", "0x8042001800244942", "0x99f31d9acf3ffde7", "0x19b11d82cf1bb4a5"
1325  },
1326  {
1327  "0xb87d1674e90a935a", "0x75ea466cbb782ac4", "0x30680664a9080240", "0xfdff567cfb7abbde", "0xcd9750185272b99e"
1328  },
1329  {
1330  "0x1f135732240701f0", "0x6aa09a1614bf4dd4", "0xa001212040701d0", "0x7fb3df3634bf4df4", "0x75b3cd2430b84c24"
1331  },
1332  {
1333  "0xc9a88d8300099a31", "0xdc8e91df745169ee", "0xc888818300010820", "0xddae9ddf7459fbff", "0x15261c5c7458f3df"
1334  },
1335  {
1336  "0xc8c828d15228b562", "0x43f86cffa3d15d80", "0x40c828d102001500", "0xcbf86cfff3f9fde2", "0x8b30442ef1f9e8e2"
1337  },
1338  {
1339  "0x41fdc0bc2009563f", "0x59dd1c417e3c07bc", "0x41dd00002008063c", "0x59fddcfd7e3d57bf", "0x1820dcfd5e355183"
1340  },
1341  {
1342  "0x9e2f78600c3a84e7", "0xac69a0e1fe7887b0", "0x8c2920600c3884a0", "0xbe6ff8e1fe7a87f7", "0x3246d881f2420357"
1343  },
1344  {
1345  "0xd424d1d9a955f617", "0x9608f5bde1c4d893", "0x9400d199a144d013", "0xd62cf5fde9d5fe97", "0x422c246448912e84"
1346  },
1347  {
1348  "0x1aa8b60a0627719a", "0x5b26e6aca95f5f60", "0x1a20a60800075100", "0x5baef6aeaf7f7ffa", "0x418e50a6af782efa"
1349  },
1350  {
1351  "0xcf5db499233fac00", "0xf33e7a29c3c33da8", "0xc31c300903032c00", "0xff7ffeb9e3ffbda8", "0x3c63ceb0e0fc91a8"
1352  },
1353  {
1354  "0x6b47c03d576e878d", "0x2032d13574d67da4", "0x2002c03554460584", "0x6b77d13d77feffad", "0x4b75110823b8fa29"
1355  },
1356  {
1357  "0xd47eeb3aefebf074", "0x6d7ba17a42c66b89", "0x447aa13a42c26000", "0xfd7feb7aefeffbfd", "0xb9054a40ad2d9bfd"
1358  },
1359  {
1360  "0x33ad9c5d20b03f5c05535f20a2941c8f4ae0f1f19500759151060dce39e5dfed41ec4f",
1361  "0x277401dc000fde7eda4d60a5698935f7febd8fbe49e5d6f56ca2e7f6118380d3cd655da392df3ba6c1b13dc0119af34cfa1d18a65",
1362  "0x10a9841c002016480453410020041c8640c0312191006411110401082924cfa1418845",
1363  "0x277401dc000fde7eda4d60a5698935f7febfbfffcdf7dff7fde2f7f7f38ba9d3cdf5ffaf9fdf7ba7d9b53de0ddfbff5dfedd1ee6f",
1364  "0x277401dc000fde7eda4d60a5698935f7febeb5678c37ddf69962b2c3e389a9920591f3ac8dc66ba198a42da0cd796d1104c90662a"
1365  },
1366  {
1367  "0xb6ea335c13111216862e370d12fb9c761a6266617f62a1904b0d7944ab3cddc71f11752ad9424b0",
1368  "0xa6b380f048a9cbe45ff4ea824064c831eb03ff875e1e3e",
1369  "0xa62200104028090410d480020044c831e1035285140430",
1370  "0xb6ea335c13111216862e370d12fb9c761a6b7e6f7feabdbe4fff7fecaf3eddc71fb17ffafde3ebe",
1371  "0xb6ea335c13111216862e370d12fb9c7610095e6e7be83d2e0ef237ec8f3a914401a14ad2aca3a8e"
1372  },
1373  {
1374  "0x8fb9486ad1f89ca5b3f6da9f0d5ef9ec328b8cc3e5122afbd8a67bd1b2b4ab5c548b90cf9fe1933a0362922f1e84ef0",
1375  "0x10615f963dffc13718ed1ecdb9cfbef33148befeb91b190dc7e7d28d8821ff248ab26a34e1b89885c643e447c72",
1376  "0x6051901ca58136188d0c4cb9cc32830040a412281b180443c192848800540080820a208138000082030404c70",
1377  "0x8fb9586bdffebdfff3f7daff1fdff9efbefbbdcbfffebbfbd9affff7f2bdab7dffaf9afffff5f3ba9be7d66ffec7ef2",
1378  "0x8fb9580b8e6ea15a72c1c272139340238c78bd8b5bec93e0c1abbc366039237dabaf1a7df5d572829be7546cfac3282"
1379  },
1380  {
1381  "0x10af96443b186faf790279bf3bbe0517d56ffc01e7fec8c88e765d48cc32333390224f4d762d1ba788c50801cba02524cb49",
1382  "0x95d44e7344fb1701bace3ae83affbb6290bf282f7565b9a82c386823f5f213a53eccb2cfe5deb4dd040067a64ada8c1b6828599b96cc70647e7d19dc7dfba393addabe689ffbe1a36642bc9844b81c6c4c2e178",
1383  "0x2c96442b084000000260ad288004028509b800c70640c080144548883032118022094d3608122408c1000181800400c148",
1384  "0x95d44e7344fb1701bace3ae83affbb6290bf282f7565b9a82c386823f5f213a53ecdbaffe5dfb5dffef7f7a7dbfbbffb797d5fffd6de7fecfefdfffdfdffe3b3bffbbe6cffffe3f3fe7abcd8c4bcbe6e5e6eb79",
1385  "0x95d44e7344fb1701bace3ae83affbb6290bf282f7565b9a82c386823f5f213a53ecdb836819d055bfef7f781d12937fb39550f6456d20f88f2f5feb9a97760b09ee3bc4c6b2c8372dc3a30c8c4a4a66e1e62a31"
1386  },
1387  {
1388  "0x5fc77dab8cd9c1da8c91eb7ba9c23ce85375b61bf3b9a8c4e4df7bc917aa8a14e747888c9756a2be2fd2e256e44194ce093a0185594de0dcf8340c45b6af7dbdc7682fbef6313f9f1cb234689d9f1ff603e1273faad89d0fe1ab57fbc7c32d29dce125fafc973754464b55ae5de58a8a5661c2065b95c2c94d7ec34",
1389  "0xd4a9158961d4c11258cd047eda13d6804c16c3a374b7f4115bd835bde0b5",
1390  "0x1080158800548100504504649012c480480081221420641158081495e034",
1391  "0x5fc77dab8cd9c1da8c91eb7ba9c23ce85375b61bf3b9a8c4e4df7bc917aa8a14e747888c9756a2be2fd2e256e44194ce093a0185594de0dcf8340c45b6af7dbdc7682fbef6313f9f1cb234689d9f1ff603e1273faad89d0fe1ab57fbc7cf6fb9dcf73dfefdb7bfd447eff5bf7de5cbee7e77cb7f5b95ffcb5ffecb5",
1392  "0x5fc77dab8cd9c1da8c91eb7ba9c23ce85375b61bf3b9a8c4e4df7bc917aa8a14e747888c9756a2be2fd2e256e44194ce093a0185594de0dcf8340c45b6af7dbdc7682fbef6313f9f1cb234689d9f1ff603e1273faad89d0fe1ab57fbc7ce67b8847738b6edb2bb8401a6f49335e14be66c5689791a807f4a16a0c81"
1393  },
1394  {
1395  "0x52cbea1f4d78445fb8f9267203f0f04bddf65b69b1acb0877143e77317f2d9679cb",
1396  "0x331e156a1e1daa0039926a08ec80c2d7c1500bc435a53ebfc32fa398a3304fcd79d90725528e320add050da666b9de42b8307b",
1397  "0x88421a41684412b839023200f0d00990725128a120a0805042666315e0090304b",
1398  "0x331e156a1e1daa0039926a08ec80c2d7c1552ffeb5f5ffbfc7ffaf9ae7307fcf7dfddf65f69f3acbdd771dbe77b9ff6fbe79fb",
1399  "0x331e156a1e1daa0039926a08ec80c2d7c155277a9451e93b86d42c0ac41070c27d64d840e41528c1d57219981188a16f2e49b0"
1400  },
1401  {
1402  "0xbde7e20f37c3ed822555d36050240dcfb5a9a3867d149cffe78e92b95573cbdde33a8c9495148e04cafa1325aae058b4a98c50f7019de1345de6dce12436bed4b86eca2d",
1403  "0xee480b4096f0c1ac565d623dd53b62dba81c507d3c8e15372396fa49de0ecf074fb0ed1785f00f8094022ff50fc436a7cbd18de8ff317c33ea9bdbd8814a7658fcd1fd10b2ed10eaf7e4c2b8f409df3c36f1f0c986a49805a9ed08bbcd603e2eec9e18",
1404  "0x547a00d1781e0020014022050040406a58981846814107c238a929950014a544038809410108c00caf20000a8e00894280450f00184a01005a0cc0020042014286c8a08",
1405  "0xee480b4096f0c1ac565d623dd53b62dba81c507d3c8e15372396fa49de0ecfbfeff2ef37c7fd8fa5d5d36ff52fcdffb7ebf38ffdffbdfff7ee9bfbddf3cbfffbfeddfd95b6ef14eafff7e7baf459ffbdbef1f7c99fe5bc5deffde9bffffefebeeede3d",
1406  "0xee480b4096f0c1ac565d623dd53b62dba81c507d3c8e15372396fa49de0ecfbaa852e220461d8da5c1d14fa52bc9f91262720b95ebad83d46409628df281abbbc65d6985a66314200df7e71214516b95baa107c81b45ac584f31e99ffbdeea96825435"
1407  },
1408  {
1409  "0x17ed0a1aa80542396e82ab79f6d4dda731d10f9487467fcfa5c8b501fa86488fbe268605c01beb257c9e301a42833d22965ea2ff0eda5f18427481a300a8f9aa81e76d774ea1dbed40268eca094bef627d2c206f6885fc12f71557bfda836",
1410  "0x422340e8ff3b4177efa5f58111fe306aa602d8020164fa34c12acdb3de81e",
1411  "0x2340604e21416540248480014a2062240000020004f810c10045b3da816",
1412  "0x17ed0a1aa80542396e82ab79f6d4dda731d10f9487467fcfa5c8b501fa86488fbe268605c01beb257c9e301a42833d22965ea2ff0eda5f18427481a300a8f9aac3e76dffffbbdbffefa7ffcb19ffff6aff2ef86f69e5fe36f73fdfbfde83e",
1413  "0x17ed0a1aa80542396e82ab79f6d4dda731d10f9487467fcfa5c8b501fa86488fbe268605c01beb257c9e301a42833d22965ea2ff0eda5f18427481a300a8f9aac3c42d9fb19a9a9aaf837b4b18b5df08db2ef86d69e10626363f9a0c04028"
1414  },
1415  {
1416  "0x290796408a0b8baa742b9d466afc4958528f7976fdce50caa83ed63285f58d200e4c65842ea24c3d4a3850a1824b61d25af9d3b41b9e64407a5262a75d9efd08481cfbc339ae26b0755438894b9e2298a35ed9",
1417  "0x4cb6f7935f5cc586320c6ce957f82cff774cde7d4201735a5acd22190fcb1c9c16d1887a",
1418  "0x4012f193141884040008406007580cfd00481c794201220210450018094b1c0010810858",
1419  "0x290796408a0b8baa742b9d466afc4958528f7976fdce50caa83ed63285f58d200e4c65842ea24c3d4a3850a1824b61defeffd3ff5fdfe6727e7eebf7fdbeff7f4cdeffc339ff7efafd76398fcb9ebe9ef3defb",
1420  "0x290796408a0b8baa742b9d466afc4958528f7976fdce50caa83ed63285f58d200e4c65842ea24c3d4a3850a1824b619eec0e40eb475be272763e8bf0a5b2027f04c2868138dd7ceab87621868082be8e72d6a3"
1421  },
1422  {
1423  "0x14e55ecb09d8c6827022df7c713c05a5d882e25782",
1424  "0x2dbdb54cb6341fcea6f67cfaa5186aa0a91b9782e362cbb0dd0ef3cbc130ce0cb2ce7232c0562",
1425  "0x10600e020898048060209c1000200124c002200502",
1426  "0x2dbdb54cb6341fcea6f67cfaa5186aa0a91bdfd7eff2dfbcfd2ff3eff7f7dfccfadffa3ee57e2",
1427  "0x2dbdb54cb6341fcea6f67cfaa5186aa0a91ad9d70fd2563cb529f1e636f7ddcce893fa1ce52e0"
1428  },
1429  {
1430  "0x2b0dfd23fc740e1759697bcba800aa1be7df28c59fe72b9869766ac34ecb4e5d0dbc74c2cbb5f734bb8d38dab59c3f22cdc706c657839580c2793c4c7660606548c048a697db3dfbad82e695c605",
1431  "0x33080f6fd52aeca572f24a98ff19b9e7327c3b951ccfd8c9a6b9bd6f7c940079e4be88178a2a6d5a2b17",
1432  "0x30007249108288030900a00cd0100c612001180004918482620206548800020849a0813880264100205",
1433  "0x2b0dfd23fc740e1759697bcba800aa1be7df28c59fe72b9869766ac34ecb4e5d0dbc74c2fbbdff7fffaffcfff7fe7fbaffdfbfe777ffbf95defffccdf6f9fd6f7cd448fff7ffbdffafaaefdfef17",
1434  "0x2b0dfd23fc740e1759697bcba800aa1be7df28c59fe72b9869766ac34ecb4e5d0dbc74c2f8bdf85b6ea7d47fc76e75ba32debf2165ffae15deb6e485d0d9dd0a345448df7365b5ec27a88bcfed12"
1435  },
1436  {
1437  "0xc0cc21922748d7626df1ab92b4ad4df1861050ca7de74adb92a140",
1438  "0x3531a6880ccc47bc3826056efe912f3db02df9c0b6931e253ab9248f472359fe59218690f6781f35da89b8f1ff45cd5a1db9a414c9d7ec62ff5859a1572b1c1880a99aa74ebe8b12c68e791c11dd6cc0e5ed5",
1439  "0xc40192054091400800898234a948b104004080410542c8020040",
1440  "0x3531a6880ccc47bc3826056efe912f3db02df9c0b6931e253ab9248f472359fe59218690f6781f35da89b8f1ff45cd5a1db9a414c9d7ec6effda59a377af7e3edfbbbbaf4efedf1ae78f7dbfdffdedf9effd5",
1441  "0x3531a6880ccc47bc3826056efe912f3db02df9c0b6931e253ab9248f472359fe59218690f6781f35da89b8f1ff45cd5a1db9a414c9d7ec6ef39a408323a66a3e5fb3238c046a540aa78b75bbcfa9c179cff95"
1442  },
1443  {
1444  "0x68cbb0a526d1fa61003e12401db51090fa4649b00b7be7465d0eb18f74c86157a919",
1445  "0x1ca7d6f9bc3e11d3c365af63bf9499b6c7e9c569da7361f0214b8d",
1446  "0x1610001c111080600641b00019a6464904218a704060010909",
1447  "0x68cbb0a526d1fa7da7fefbfc3fb5d3d3ffef6bbf9ffbf7c7fdcff9df77e9f177eb9d",
1448  "0x68cbb0a526d1fa7da7e8ebfc23a4c3539fe92a0f9fe25181b4cbd85507a99176e294"
1449  },
1450  {
1451  "0x210bef18d384992c5eb72e2b362c7296d9810f5ba9fd25e2d5648989d65095e45d1478f2a83140a0f68033a08fa3d7c392a3dc77e8e6aeba9ed76038e9e7825255fac990bf1098e6f9cba0",
1452  "0xdb48641b3f63e5f1f41ff3b1578c4b190de42379d45cba03c4c6f34b1b14ea930fdff90dca53116710228e45b081fbddc9273a542e6f689642453adb91086bdb99681342113262d67f5517f2691024fe367459b01872549211067798063cc00b16c883b8cd2ffaa6d6116863f204bb23ce26c5bcdaf3e1b816dcf65ca",
1453  "0x21014200d280002452a52800062c309681000113202d25e051640081024081644510008220010000660000208c00914080238c52e8a22c201686202049a20042445ac9803e108064c94180",
1454  "0xdb48641b3f63e5f1f41ff3b1578c4b190de42379d45cba03c4c6f34b1b14ea930fdff90dca53116710228e45b081fbddc9273afeffef78dfd2c5fbfbf3bb6bdfb96d9b52f5baffd67f7d57faf99d65ff7e75d9f79f7ad7961b0f7f9b3e3cfa3f7ef9abbdcf7ffeeeffb9ed77f38ebf7bef27dfbcdbfbf1b99efffefea",
1455  "0xdb48641b3f63e5f1f41ff3b1578c4b190de42379d45cba03c4c6f34b1b14ea930fdff90dca53116710228e45b081fbddc9252aeadfe250dfd080d1a973bb091cb0058b52e488fd04217841baf18d41f7683188f79758d7861b091f9b3c343a366af1a9850a5174cc3db88515f18a255beb039a1043f810b198b36ae6a"
1456  },
1457  {
1458  "0x143143205d76a7287d48be24db8fbfe37c291d82e103aa05cfc172fb920f0e8cc15c47de948b964e39be34a5b8a2610198c0c5b98543e6e727be153cfff0338f229cc22f029e04f766c62988634fee1a0a16880c93e5b10bada4018b6765b54c08f5710344dbfb9e9ad5dd7914cab496b22a6",
1459  "0x2d58b8b513f4bceb8300f8b978e31c163f36155e9678bb0f221ee7cbcf7262b9d53c7a395ea916218fa2478baada74f3e69df63a7be0c9554c07004f9e4d869642bbd63a9fe07138a6aef7ad14c74231cf6401c597f9b6d15c266c42c28613838609bd4f4522c9eb65fc8456acc339c641ac7d7b7bc2c48c8f2",
1460  "0x100201970a308140836045a8638a30c201c82c103220089c1307a100e0804010c0246808a924431a614a4382260011040050005024486060211143a902001208482270014044220c620004107e8120014000c02c080038184018947452048086570004488c31882418c79104a8084800a2",
1461  "0x2d58b8b513f4bcffb343f8fd7ee73c7f7fbe35df9ffffb7f2b1fe7ebcffa67ffd57efbbb5faf9ee1dfe7df9fabde7efbfebdf7bafbe1c9ddccc7b9cfdfefe7b7febffefffff3ff3abeeeffaf9ec7f777cf6d89e7dfffbedb5eae6cd3e7b71bafa609bf6f65b7cdebf5fd8756fffbbfded5fd7d7ffbf6d6beaf6",
1462  "0x2d58b8b513f4bcffb243d8e40e44346b7788318519c758730b03652accd86776144e81ab51a79ae0d3e5991f214c3aca58a95382d981c8cd8cc2b9caddab61b1fcaeeac56fd3fe1a3a6cd8af8ac3b557094d89a6d817acdb4aae60d12737182e22083628209785e3908d87127738a75c9471046fb176523ea54"
1463  },
1464  {
1465  "0x258e988b847b06b73462629161e28517f7b9ad7b5c19a9ad2c07f9a66f33fb2220fddb5a33b9cd5c2d63fd543efa1bef16e26b95484d70d0d7cfce28491ace0a608fb6cf9e97cb88d73c96c9150f9ef53c5e75bd68805fdce891e5935e9428ca67eba1e345148fcf2",
1466  "0x1857c0e26e0476169cf804c8d5a431022cce0da75d7642a2414a900370f201f5073c7e700ff6626fbd8a104182954fa9f23a45474af5456a00e36f6a6c8162afdf7492d387a455dd8506167d5cc24e6861d7b480b1458230",
1467  "0x1812c0a04000121280780040d12430020ccc05a319144082400a900360a000f10624385004d6000d3c880000808440a0003a44414874000800c16c0040816203c56412d2800455cc8106103548420c206092140011408030",
1468  "0x258e988b847b06b73462629161e28517f7bdfd7f7ef9efed6dcff9eeef7bfb3222fdfbda77ffed7e2d77fd543fff3bff56f3eff748ff76f6ffdfef2c593bdefaffafb6dffebfdfdef73eb6ffb7cf9efffdff7dbd78fa5fddf8d1e5f7dfdc2ceee7fffbeb4f14dfef2",
1469  "0x258e988b847b06b73462629161e28517f63cd1757af9eecc45c879eae269b83202313b80466ea9760977545409f53bf04691ac7248b216f62c176f2c51339af0ffac129bea389fde7732a03fb3c788dfc1a93c9050fa1a8130c184f48b580c2ce1f6daab4e00d7ec2"
1470  },
1471  {
1472  "0x328edc02c67d84bf095ac048e50c2dc29cffc08184b11e4da02904be14eccd317e9f6bdd6fe2b8233e8928d65d4ad434ef8a629cae6013bfb3c54be167e16371dc6412b62c2b1213424dfb7d391cea8a7494a28576ce823d8e111994182909efba7dd3533dbbe510dab4ac5ef",
1473  "0x61a1365a1226597896c514f5bb16a064f6ff6982ac91ea568daa43e473aa63867bdb628e92e97ebd4f2091",
1474  "0x4121224210201020968510918a00a04042284100a801c84001884180108a63865911228a92410ca94a0081",
1475  "0x328edc02c67d84bf095ac048e50c2dc29cffc08184b11e4da02904be14eccd317e9f6bdd6fe2b8233e8928d65d4ad434ef8a629cae6013bfb3c54be167e16371dc661ab76dab3277d7cdff7d7f5ffbea76dfeff7feeecb3faf79dbb43e6f3befba7ffff73dfbef97fbf4fe5ff",
1476  "0x328edc02c67d84bf095ac048e50c2dc29cffc08184b11e4da02904be14eccd317e9f6bdd6fe2b8233e8928d65d4ad434ef8a629cae6013bfb3c54be167e16371dc6208a5498a3076d5c4972c76475be072dbcd73eee44b232b79c330266e3349821a6ee51552cb8731605e57e"
1477  },
1478  {
1479  "0x37a92944b67fae733d201c024838975531bc3f748d98089eed38faed40c9463441cf48ac40e98097ce75db2bf0120ef69087a176d31d562cc99137c67e4a659cbb1298ba150aa191ced4089deee7048511de602414936af93cb2cef1b7ee801d9b75d961d33bb2958669b16193abf7b55ccfebac3a490415128dac92",
1480  "0x6fb8d83d986c4604db1b9396493a0a68270806cdbcc3299a049ebe77bd6891258e6313c720fb1b30ae9c4387ba51db3325e15033d9e01d499707c138b4cf4b85032da65e9ce3aabc5effbf7003771476ff71e86f665d2d3e7578dfcbb8f08c1619f609ec147f0",
1481  "0x88c811882c440490030014400a0008000804c51c822900008e2800380001218462008100780320a6184381280181102001102140801c4810004118a4024101022d824a0ce30a3c4801993001161432bb2148660214093a357855c8b8b080041040012810490",
1482  "0x37a92944b67fae733d201c024838975531bc3f748d9efb9feff9feed60cdf7bd79efdbace6ebf097eeffdf3bf9b24ffff7fff7ffd35df63dfdf33ff7ff4aeddcbb7bbdbfb73aff95cffd9e9dfeff74fd13df6cf4bcd37afb7dfbcefbbfefefffff75ff71d77ff79f86fff5f3d3eff7bdfcffefacfb699f759ecdeff2",
1483  "0x37a92944b67fae733d201c024838975531bc3f748d9ef3136ee17c292084f78d78abdb0ce66bf017a2ae171969b2471d77fc77ffc145b01df5e33877cd408c5883693da7a638ff84cde9969c3a7e74f902552cd0acc35823595b00cb1c2b6fe66c75ee109454458b009fd4b3404ca038a07464a4fb289b758c4ceb62"
1484  },
1485  {
1486  "0x1ab020d8beb54c354411f3a5658b5e5e87a896d7049c5eab20a302b6e35ca98364d7edd00eb3e209dcb035fe4b6eeace4e525229bf790c67bae63821e1282712d7c624efa64b3e5ad1a73aeb1033d4cd5949d63183173632445c9f488e74cd",
1487  "0x4d706a200a7a70e0b6eeef2dbdb88779dd50af16e6405c17fd2c2efb5493cf13b730207a009a14ca150042af3e6b7f05230161a10073f87a56afede3c2cfd09857f78d7913cdd966e9a2e6e6e3",
1488  "0x45000000a2a20a002a6e30ca9800451cd500e12e2005c10352c0a6a40824e1212202078000210c21000402826025704200120010052d02212ab0023c0cd5008563181111200404489008664c1",
1489  "0x1ab020d8beb54c354411f3a5658b5e5e87a8dff76ebc5efb70e3b6feef7dbdbbe7fffdd0afb7e649dcb7fdfe6ffffedfcf53f739bf7b0cffbeee3d21e3af3f7bffc727efe7eb3e7bf9ff7eeffdf3d6cfd9d9d7f78f7f37ffdd7effeaeef6ef",
1490  "0x1ab020d8beb54c354411f3a5658b5e5e87a8dba76ebc54d15043b4580c71143be3ae3080a1a5044980a7c8d26595be5d8141e5199f030cfdae2c2d21a3871979a8c307eec7ea3e2929dd6c44fdd0160289d181c60e6e25ff9d3a76ea68922e"
1491  },
1492  {
1493  "0x85993ec08ac960d46bcba87136f24042485c6d3e0a9973e828df60e537860d6bc83dafa7fb292beef466d0a939ab9da2b",
1494  "0x4c9a310b11d6e4b4d29d7ede30fb42161fd6a58792440f416abda6df55913a8a26c35140524de5dd9519c30f19641f4f0863bfefc2ae6c89333dd77d6f688cffcbde281772cee0dac9bb0dd16b6c1d33fa7e39b2e781896dcc2b0aba3abedf1381f9f38eb210f5bd2001ea8453ceb136dc3915fabdc30709db0b1a07ec40be",
1495  "0x811926c08a08601002c8803022a2004040180d1e0889210808d2000420040c6b002d83815b290820700490a1202a8402a",
1496  "0x4c9a310b11d6e4b4d29d7ede30fb42161fd6a58792440f416abda6df55913a8a26c35140524de5dd9519c30f19641f4f0863bfefc2ae6c89333dd77d6f688cffcbde281772cee0dac9bb0dd16b6c1d7bfbfe39bef78dcffdfeaf1bff3ebeff97c7fbf3afb73ef7bdf60ffbfc73debdb7defb7ffabfffef4fff0b9b9ffddabf",
1497  "0x4c9a310b11d6e4b4d29d7ede30fb42161fd6a58792440f416abda6df55913a8a26c35140524de5dd9519c30f19641f4f0863bfefc2ae6c89333dd77d6f688cffcbde281772cee0dac9bb0dd16b6c156a6992311e718ccfd176ac19d51ebafb96472a1327252e7730d60fb9fc33180db506c36a482f7de84fb601899d559a95"
1498  },
1499  {
1500  "0x4d9f3e8aae22123e382e7835d3d9d7e944a5c81cab3415fda40d0ec8fde8a50d8b21b2298f83a65bbdb10d120d302d8db4e9807715be0e",
1501  "0x4dacc1a6f2cecd4179556cbbdfe1cedbc952de5232ff1fe1ae9c0c3bbfcd9087e4ed5bcd1f8c289b1456ef032d888",
1502  "0xa48104308c4c004854008a93414eda4050cc02128a10c0a2180018b8080083c00051001300089b0410070109808",
1503  "0x4d9f3e8aae22123e3cfefc3ffffdfffd57b5dedfbffe1dfdbc9d2fedffeff5ff9be9f2ebbfffff5bffffddbeddf8ef8db5edeef737fe8e",
1504  "0x4d9f3e8aae22123e3cf4b42fbcf53b3d53309ed716ca09101898232ddec754f391c872ea347f7f53c3ffd8aedcc8ef0405acee87276686"
1505  },
1506  {
1507  "0x28d61d5ca1f56b4d3134009f478b17ac208a5b559d9c3726a7a16919e3b12ec6d61a142dc04d834141a9a4",
1508  "0xb444947aba00d50e10326ebea7a2618a10144dde07c15c685d4785eae16d232eb741bc2a09b7cf794a33ed3598803ad61af",
1509  "0xc00104a1e06a041020000445801404008050501c8c160222a16019c2a00a44d610002cc04980010121a4",
1510  "0xb444947aba00d78f71f7eebff7b6f39b501dfdfeb7fbde68fdf7ddfbe37f6b7eb7d1be3b1bffef79eb73fd35d8b43ede9af",
1511  "0xb444947aba00d78371e7a4a1f116b299501db9a6b6bb9e60f8f2dc33221f4954a1d022111b5ba218eb71313140b42ecc80b"
1512  },
1513  {
1514  "0x1b9a0b9c87fa234d05d06e18171cce3f8fc4adf7f75a402c4c5a281f46e714b96badab2184546aa11a7be482616cbb973da00e329628d3e692b69b43d34391884d87fcd64e2339fbb30044a370fffde97a128d1e5",
1515  "0x7d641e556550c3ddb89ee553cbc0d8d92cdaec6519a2ff3bd792e0b309c24cb49056fb219ef4dfb2a72e76ac7df3407a44e55af5689e9c85c87e74d542dfb445f56a0a518c",
1516  "0x78640a55655080008084a001c0405049049ac8201800462a1182a000000248b01052002108608d32212a60a43d30001804c05ac56082108588300440020fb4449520085184",
1517  "0x1b9a0b9c87fa234d05d06e18171cce3fdfc5edf7f75e7dffcdfe7d3ffeef9dbbefafef719e7ffbbd7b7fefb2fd6cfbdf3defbe3bff6dfbeef2f7fbc7df7797ac4fd7ffd6cfebf9ffb7e74df77dfffdff7eb2ad1ed",
1518  "0x1b9a0b9c87fa234d05d06e18171cce38598548a1a2567df7c5b47d23faea992ba6036d701e7b991c6355efb2fd4870de38cfbc2b796528cce051f1840c77962c03d25380c7caf1a734e709f75d04b9b62cb228069"
1519  },
1520  {
1521  "0x142cd4c71f04927a526ca430e542cd9432860",
1522  "0x1337869f6c145daf15b226485ef3c48b8037bf7cb2cc9834153b90f55d4217a5e4a9ea133",
1523  "0x142c90c41804103a106404000500c48022020",
1524  "0x1337869f6c145daf15b226485ef3c48b8037bf7cf6cf9f34977bd2fdfd72f7e7edbdfa973",
1525  "0x1337869f6c145daf15b226485ef3c48b8037ab50660b87308741c299f972f2e7293dd8953"
1526  },
1527  {
1528  "0x4f517f63e95a08284faaf4d4a290c334fc5d039e386727ddbb5d0a6d5fbb5540e97767023d60bedd158ed25051a6c56",
1529  "0x9e2c9c6d2e3be2ad25733871aeba4ba64081294478f936f9c4fc45ada6bb2c098c98f21e709a88995cc3b0cf7e693f8e73f58f8f4735c81e8421182fc15426174f3b6da7b493135c",
1530  "0x4f405a4269120008498a20c400808114cc190096200320c53b5808645318014040110200154020541186d2504120054",
1531  "0x9e2c9c6d2e3be2ad25733871aeba4ba64081294478f936f9c4fd57ffbebfac8b8cfaff5f7abb8cbb5fc7f0ffffef7ffffbf5dfafd7fffd5e8eb77e7fe3d62fffdf7beda7b59b7f5e",
1532  "0x9e2c9c6d2e3be2ad25733871aeba4ba64081294478f936f9c009525b982e8c8b08625d533ab384aa130660f69def4df3a8405f2992ce7d4a8ab66e5fe2822dfa9e638082b1897f0a"
1533  },
1534  {
1535  "0x1713f8f439c07e35b741ec9b0bca80149a7ef129c73c23c34b4515d29dc7dec711007fa395ced70f3bebc6d229edb75bf04231f2414e0a826f3edae4edcf770d59650cc252c6a2eff07fda9baa70938085d1e15144a451d26304d8f3df2406b8eb40f4fae3666780d2e54cd93a5f17439a4d3656dc5d48",
1536  "0x328df4b64b0bd0fbea359666904ea4aa215b03727a70bda853b6cf612b12c3d56ee93b003bd00a7b9c1d6755f580b467deba33bf7f33da4c37fffe79e73e4381ad4bf1306d1b58f5eb276cae813d6f9153d1294c51098d37b3b80154da",
1537  "0x108094864a0310006a219446900e20aa005201603250b00011b241400a0243144ae02900330008610c004244a080b067da9a22301300804021514420411243008843d12004184840e02260260100428140d1284c110188053210005448",
1538  "0x1713f8f439c07e35b741ec9b0bca80149a7ef129c73c23c34b4537dffdf7dfcfd1fbffb797eed74fbfebe7db2bffff7bfdea73f6cf6f2b92effffeedffcf7fdd5b7f9cdf77d7f7eff47fdebbbbffffb3dfddf7fffefdf7fe6385fdfbff346fbbfbf5ffffefeee7bdfff55fd93b5f574b9f7fb7fedd5dda",
1539  "0x1713f8f439c07e35b741ec9b0bca80149a7ef129c73c23c34b45275f697195ccc1fb959603a847419f41e7892a9fcd2b4dea62448e2f2190acebb40dd6cf4cdd531e90df3593576f4418042199cfecb35f9dd6aebaddb6ec208575b82e146ba3b3b51fdd8fc8e6bdbd741f081313464a177a85eedd0992"
1540  },
1541  {
1542  "0x68bc9c8f8257c6c88c0b2d46defc4539748fb906140acbf1a68820d1748bfc13ec84619f2b495d1ce74e0ca441a246497",
1543  "0x2d30db90794c4b611858b19c973ea865904346738291751ba5fccc5cbf02c09876aca6bf23289174f545ad8039e0fbcefe359521dfc9681a7715e672fdc23cc446c7900851d2ed09568729c88bf9653c63f7e229893f31059e8b51924a54968d44e5bb26decae3159ce786d9b3a1454c6d6cb8108d22bd5111d2cc7eddb",
1544  "0x68241c03824200880c0105068a50000854868904040a02d0828000906482d813a004400d2808100c220c0000408046493",
1545  "0x2d30db90794c4b611858b19c973ea865904346738291751ba5fccc5cbf02c09876aca6bf23289174f545ad8039e0fbcefe359521dfc9681a7715e672fdc23cc446c7900851d2ed09568729c88bf9fdbceff7f7efc9bf3b2ddedffdd77b749fbd46f5bbefffeeeb35ddf78ffdb3edc56dff6ff95d9de7ff5db5d3ee7eddf",
1546  "0x2d30db90794c4b611858b19c973ea865904346738291751ba5fccc5cbf02c09876aca6bf23289174f545ad8039e0fbcefe359521dfc9681a7715e672fdc23cc446c7900851d2ed09568729c88b91d9a0ec75b5ef41b33a28d855add77320193442f1b1ed2f6c6b354d930d25a04dc12df247f14d91c5f35db5936e3894c"
1547  },
1548  {
1549  "0x6eef644a36b1e052a413160909a537f81d46b2d330981f507d84737065541b5bb5faebfa8491dcd0347fbe498a501e254b91f6d82d6771a69d0aee5a490e2a44a8ba4f5da963d70b486f36f4a65f372a6a60522cac6e6a01d1a2da8743d5381",
1550  "0x391d108a0ba169bb746b3d5816fa985288c230bdde7e3b8433f8d595b63f08a90448923f30926960cf736be42e377b087e68848af89d80d95122b942b0162153d9d665c0e3508d8a25c8862c0bb7ad4f00e4b1213326f5ce32433df12cb9",
1551  "0x3004000a0a01280130601018127a8050080030098074038003300415003508090408800910800140cb6008a4002250081e688082701800d00020a000a004000380d4408021508482214802240332a406002080002220150a200034310081",
1552  "0x6eeff5db3eb1fa56bfb756bbdda57ff99d6ebef33bddfff3fdc77ffd7d5f7bfbbffaeffba7f3ddf6b67fff7fbe52ff77fb97f6d86deff9fe9d9ffe7bdd2f2b66bdbfdf7ffd6ff70bd8ef7efce6dfbf7afef05e6fbe7f7a6fdde3feb7dfd7fb9",
1553  "0x6eecf59b3e115a443fa450badc245851986e3ef03b45f8b3c5c74cfd3c0f78ab3f6aaf73a762d5f6a273497f3412fd52fb16105065c8f87e909ffc71dd252b26bd87d23bf56de20390cd6a7cc49f8c50be905c67be7d586e8d41feb49cc7f38"
1554  },
1555  {
1556  "0xa210334e6ffbec2fcfa42021075f84222c7",
1557  "0x181b940df674ffa93b3346264fed88e40b8d8f252487bc1f2cb4c3284fa17145d2cd0c77102fc177898e53fb12c40525aeb017a57661a80a268f27b4c78cbb4bae0e96ed0065e32bc7dcb01be9cc4e6bd5db5e453e94855cb2d1d3f86e8218fe55035102fc10901add0eb539089af",
1558  "0x821032440351002c0080000106150000087",
1559  "0x181b940df674ffa93b3346264fed88e40b8d8f252487bc1f2cb4c3284fa17145d2cd0c77102fc177898e53fb12c40525aeb017a57661a80a268f27b4c78cbb4bae0e96ed0065e32bc7dcb01be9cc4e6bd5db5e453e94855cb2d1d3f86ea218ff5f6ffbeeffdfb43afd0fffbd2abef",
1560  "0x181b940df674ffa93b3346264fed88e40b8d8f252487bc1f2cb4c3284fa17145d2cd0c77102fc177898e53fb12c40525aeb017a57661a80a268f27b4c78cbb4bae0e96ed0065e32bc7dcb01be9cc4e6bd5db5e453e94855cb2d1d3f86e2008cd1b6caaeed3df343afc09eabd2ab68"
1561  },
1562  {
1563  "0x2db0666cd0edeeab9e46e5b729521be3ece0714ffeefe18cd1b8b0f17e04c51b0d79fc6d428c22b9af63756",
1564  "0x1c1d5f18453c10d365065465c676fb8b58cb436b88660a0e19c350feb1f6954caf029a43a3e59bb35ce0bdbf80a7b8ff4b4f5d7d133bd244df8813e9695b1a6af9cea293e5da9ce4f8e1035fc8ce4ca62ecbec89e89fe25053e4153899415f61c41fcb412f13b58ac70fb84077831497f",
1565  "0x8906468c0014e888e44a426094009e08ce05043e4052088411820c01e00410b01318845028800318300156",
1566  "0x1c1d5f18453c10d365065465c676fb8b58cb436b88660a0e19c350feb1f6954caf029a43a3e59bb35ce0bdbf80a7b8ff4b4f5d7d133bd244df8813e9695b1a6af9cea293e5ffbce6fcf1efffebde4ee7bfebfe9bebffe2715ffefff99dd1fff1f57fcfc53f1ffdfeef4fbc62ffaf77f7f",
1567  "0x1c1d5f18453c10d365065465c676fb8b58cb436b88660a0e19c350feb1f6954caf029a43a3e59bb35ce0bdbf80a7b8ff4b4f5d7d133bd244df8813e9695b1a6af9cea293e5f72c829431eeb163500a4399e2be920b7302211c1afad91590e7d13561cf84341ecc76aa4d3462ce2c77e29"
1568  },
1569  {
1570  "0x33de1dc3fc5d6eeb5cbca27cc816a3727d1f9188400ea6b2c2799a40f7e611770b45cac7ed49fc0b66a46fcaf2393c0e03741bd08d26308fce62b0c56fbe44cb0949990bc3d4e5919ee1706dce518d6a06e865bdc26e761ef6723241b33583262bc4365103ba49dd17c0",
1571  "0x148a80223564208532d09dd94cf189921325cad8f2a6a32568e36b2007f00866ce0c8e59034cac999f915817492737af76413832e2c4e840627b91b54766a1555e91b87b2692df16c41161184ac9a124d59aad5c06b1a61892cf5c0cd6cc628f764a161f1bdd6546cb51a1510eef5ddfbd",
1572  "0x1121081d84c608910102048c812a222250881080006a00042480800510200240905804005492403262441083220040800601b9085062081444290806b2600cb004011010040c18104c1102d4c0081220080451c00464402867202001311812402c01001010a495d1780",
1573  "0x148a8022356420b7fedddffd5dffebdebfa7fed8f6a7f37d7ff3eb600ff6bae6ff9eceffe75dff9bdfdbdfff49ff3feff66ffaf2fbfcee43767bd1bd6776afdf7eb1fd7fbed6df1fcd996bdbdeedb1bef5faedde57bdee1efaeffdcefefe7eff767a57bf3fdf676fcf77f153beefdddffd",
1574  "0x148a8022356420b6eccd5e25119f62ceaf87b610e405d1587772e3600956baa4b796ceaee55ddb92da5b9ffa00db3cc9d22ef2c0dbf8e6431660413861562e9b3c217d1498d6141f8d886adb9e2c30ba34eac092573ccc1e7aaae1ceb8ba7c79047857ac2e5e436d0f67f052b4a680c87d"
1575  },
1576  {
1577  "0x683d881de1820ee9fbb71ccd74fd10e3a9ce71bd132955b9e9840d9259275498d2fae81b112416f37e9af907c319657d5d81623462b98d93818a23751a2196de6dd7c18e05960",
1578  "0xa9a2ae43423e6c78cc59ceba6601f6d85397527c462767dceeb1ebc6ad425fb2810a2b7525",
1579  "0xa880a002402e24688c104c300601d4d81203422800012018a2314182094046900008205120",
1580  "0x683d881de1820ee9fbb71ccd74fd10e3a9ce71bd132955b9e9840d9259275498d2fafa3bf53437f7ff9efd9febbf657f7d857b7567fdeff7fdceeb7fbe6bd6ffffffd1aeb7d65",
1581  "0x683d881de1820ee9fbb71ccd74fd10e3a9ce71bd132955b9e9840d9259275498d2f07231f5103515b9163c9b28bf056230045b41457defe5fc44c86ba64b42fb96ffd12cb2c45"
1582  },
1583  {
1584  "0xa827c5e2bd4293ed726065b32cac5c18d9df68b18300848f23f98c22fecd6b9fe7ed38a5adedd78f8dfe975d85c171f62b766947d7cd3d2ed3be52b50b792c0d6bb2701e28f22674a092e5ee0ec89bcd52680c6ae673a",
1585  "0x1deac63a0a7ae71db949662f05aafcefed47a6c6dd5819dc82d250d978001903a1f19e1b8b44e76bd5899884bb97121fa13a63c33822314a486d29b59b66f141fd64af3414a3ea6bdca9b4362e704c744e8a12c1ab736636ca3aa9da4b75795f1a",
1586  "0x202040a28c429068606045810c880c00099700018000040921b88402768d48998049382121e813860c328201048000d20b502047140d140ad30042340239080943226004004020202012a52602488388102004428471a",
1587  "0x1deac63a0a7ae71db9496eaf7dfeffffed7ff7e6df5b3bdec7d3ddddfe8b1933a9f9fe3f9bc6efefd7b9fefefb9f5adffd7afbdff977f95e5f7f6bb7fff6fd7dfff6ef3ff5abfaffdee9f6bf2f71eeff6eef5ac9af7fe6fecbbefdfecbf7ff7f3a",
1588  "0x1deac63a0a7ae71db9496cad79f4d73bc47971e0db032b164713dd448e8b0133a9b96c241386c887033066fa681d48c17c429b1cd157e9165f724b02fdf28c3d2eb6420ff188badc4e69628d0971aefb6ced58c8852d86da43867cfccbb3d73820"
1589  },
1590  {
1591  "0x1cc981657c8a20f5c777fc1df0e3cde0b23d434e043732dcaaa0758e009a8d1bf8591ff8db693d676eff2c39645b79c06b510ac22b1b47551eb728aa9404c24f2a6dee6bbdf2276759786f4116d21f4009dd6fb8e277976668bd021effecc797ca23682b97dbdffb93333834b8bb8fb68e922f42e3c00111",
1592  "0x1e52f1e05fbedda88873e9984a7a19bfbfbe9ea43e30588f46317b5cadc8eb02d255875f1dde872476d05dec1164e46c7fcf3fd718fff34a80d4c6e951d10f6ae0225d00e3953e99e",
1593  "0x61010a002b094200063608808400824b2a69ea43a10000644110254014821000015865b0c060124668050200164c4687c823682187db14a801002814181086a60200000221400110",
1594  "0x1cc981657c8a20f5c777fc1df0e3cde0b23d434e043732dcaaa0758e009a8d1bf8591ff8db693d676eff2c39645b79c1ef7f1ec7fbffdfdd9fbfb9aeb7a5dbfffbedee6bfff7aff77b7fffcbdedebf6d2ddd7ff9fffff7676dbddedfffeec7d7fef3fd7b9ffffffb9f7f7eb5bdbbffbe8eb7ff4efbd3e99f",
1595  "0x1cc981657c8a20f5c777fc1df0e3cde0b23d434e043732dcaaa0758e009a8d1bf8591ff8db693d676eff2c39645b79c18e7e14c7d0f69ddd9989b12e33a559b4d18404285ef7af933a6fda8bca5caf6d2c851a493f9fe52105b8dcdfe9a2815036d0955a1824eb539e7f56a1a5ab79188cb7ff4cda93e88f"
1596  },
1597  {
1598  "0xb77c8e0971a4f32bc9539c14b542ed2fa08e87560981cbdca4ccf4f7cc04fe7546a4a7eebe2592d131329fd591f66728a4179e",
1599  "0x2fb77bc1694a8265e74ee9f41672fc681d72ea8eb65ef5807bcba4bc52ef9e381a4e4315a771497e506b734def1ca93dd519fe9e6944dd782380dff70b72798c",
1600  "0x327c080970a08222485180108100ac02a08e0012080101842048745048004c6504a025c4182492410010180180d6670820118c",
1601  "0x2fb77bc1694a8265e74ee9f416f7fcee1d73eeffbfdff79c7fffe6fd7fef9ebf5e4fc3dffff5cdfef7ef77ffff5eadbfffbfff9ef975fffff791fff72bf67f9e",
1602  "0x2fb77bc1694a8265e74ee9f416c580e614034e7d9d97a61c6f7ee6517d4f10bf4c47c2de7bd5858aa7a777b39a5a0d9a3ba7db0cb875efe7f611299023d66e12"
1603  },
1604  {
1605  "0x89a0fbe80f4c622f45f4f7a15d8dc23bff17d939349f39cffa643af024db78243fc46c7948ab14ea12595e8a6cf2196ed4f353d9b1b8834b96fb61073301b99af019f042b2215e8cd5f31cf65123dab47d6b697a",
1606  "0xc2b6f7a999af54a94c156f771b995b528",
1607  "0x22215a8890f108944102d23039012128",
1608  "0x89a0fbe80f4c622f45f4f7a15d8dc23bff17d939349f39cffa643af024db78243fc46c7948ab14ea12595e8a6cf2196ed4f353d9b1b8834b96fb61073301b99af019f04ebb6f7e9ddff75ef6d177fff5fdfffd7a",
1609  "0x89a0fbe80f4c622f45f4f7a15d8dc23bff17d939349f39cffa643af024db78243fc46c7948ab14ea12595e8a6cf2196ed4f353d9b1b8834b96fb61073301b99af019f04e994e24154f06566290752dc5c4fedc52"
1610  },
1611  {
1612  "0x61cc2de53fe06a0381ce0dc4999795469453324c9036484632c257f02dddee71188198ed649bbe9ddae347178970bfbd3f1f28a787ee407a433f8473ba4fb77940227b769c9d555a8a70917ecfd038f80da4c6d5dc7211cc468c69a2275cfc119f145d2887543bbeb24",
1613  "0x117135d192a9645062d1be59a1f8b151692159285e5877a0ae304521ad800f51fbba812d038e053cb79578c70cd34248a2b4026533bb961add83d9362893b74ce01695861c82b6f94f181feb4a957875c74cf1e7fe48dcc5196bf1214cc564f599168bf2fee1a07e617cfac992443fcdb28247",
1614  "0x1c408050b000202018205c4811200420452124800340802200250302051ca71108010cd24008a09402243138960ad983d13208103644000411800402a4f947100223020148554508a1011648dc010900d0004c454421180408c29a20204e4118f04192003541b28204",
1615  "0x117135d192a9645062d7bedbfffbff57e9395de8de59fff9fe794533adc90f75fffbad2d7f8eddfef795f8df8ed74bfbebfdae7573fb971bffd3f9f6aafbffece7b6b7fe5fbbb6fb7f9c1feffffdf9f5d7ecf7efffecfdc79febfb6d6ddde7f59dd6ebf6fee3f5ffe17dfbcdd2cc7fcfbbeb67",
1616  "0x117135d192a9645062d7a29b7fab4f57c91945c88211eed9fa59001289490c357fd9ad087c8cd8e25084f0de82050bf34b69ac5142c30111265028c4a2ebc9a8e7b2a67e5bb91202388c1dccfdfcb1a092e456eee9a421c696eb2b6d2198a3d485d2e33464c3d5b1a0650b8c40cc4a8e096963"
1617  },
1618  {
1619  "0x1af3ce2ba6101f661c52430ae7280e3491d8d044a6621c3ef348c4e6e45fc6dfc91ec46b27214a9ebff52a0922fdebf1e895cd7cc4f428c64b7b3c4711b53f1f04f25b2f63ba70f281f52cb8149509f1ad38156397556eedf9e5c72388364cdba9112913",
1620  "0x5c5811bd255dad9049ec956e6eeaa95895e56e1c5c03cbfe24ae065ac3f528fda51a966771d288dfe3aab7611232e6f6bde10cf0d97620ebde6370ab24dbdecd4d7783c05cc8579517951049f16b26cf1612f6344a669d93ac990a997dfb5180a07a75f6a20dc110fd5547e744cfe0b348cc1786d8c7f587dc83fd9e8fdb9",
1621  "0xa00e02861011200452010885280a201010000426621c10c3088462041dc61708124429240042183c050801205169510095043044f02006434024411130091000925b25000a00a201602098100501502c30046203140cc1786584230834481b89002911",
1622  "0x5c5811bd255dad9049ec956e6eeaa95895e56e1c5c03cbfe24ae07fffff7bafda5fef7e775f2aeffe3ebff7d9f36eef6bde3eff4dd7e6eeffe6ffcbbecdffeff5dffebff5ee8d7bfdfbf1ec9fdffeecf569ef6b7fbe6fd9bfff9fadf7dfbf7bba77f7dfff2cfc159fddf5ff7c5dff9f75eeedf9edcf7fd87fccfff9f9fdbb",
1623  "0x5c5811bd255dad9049ec956e6eeaa95895e56e1c5c03cbfe24ae07f5ff17929ca4ecf7a255e226ad6349fe7c9f36ac909c22e3c455384eae220e8c3ac89d6cbf59de683f0e68c5bac92a0ec0adbcea80549e9283f9a2ec88ff68fad65849a7bb07755de9f0c64059adca5d34c599d9c61e22c81884b5cd04b84e470f9d4aa"
1624  },
1625  {
1626  "0xcd10bb69c381582eff7391a446db73312e738c6978564b350ca88e09cad650ef89dfb4cb00831c41d4739e957fdac00124348c91183da60b8f12dd3e349cad8b8d752fd9ea5613b1a41818032e0a2f2030790009a4fe9cdca54f96402b143e",
1627  "0x7c4f944973a8882522976043833419c2c15b1531af1207b40092dd1e3c123a4cf06370c3111b",
1628  "0x104d140010a888052007404202101180001801200a020030000009043c10180440024003101a",
1629  "0xcd10bb69c381582eff7391a446db73312e738c6978564b350ca88e09cad650ef89dfb4cb00831c41d4739e957fdac00124348c91183da60b8f7edfbe7dffad8bad77bff9ebd737b9e6d95b173faf3f27b47992ddbefe9efeedfff770eb153f",
1630  "0xcd10bb69c381582eff7391a446db73312e738c6978564b350ca88e09cad650ef89dfb4cb00831c41d4739e957fdac00124348c91183da60b8f6e92aa7def0503a857b8b9a9d527a866d943161fa53d27847992d4bac28ee6e9bff530e80525"
1631  },
1632  {
1633  "0x1cdc2579b3f1727c03a0f733c6a1a50025c8b51640ed21fb0e700f873d35c83797a14",
1634  "0xe3e7298d39a9c7cd225125b1a01505e3d9ca63f8b494e4d7218b10e8bddc06984bbbe43e263f30f6a92a9d7",
1635  "0x10042120110162580220f03084a085000100a0144004004b0a600e063d30c02102814",
1636  "0xe3e7298d39a9c7cd225dfdb5f9b7f5f3fdcbe3ffb7d6e5f721afd8fdbfdcefb9fbbff43fa73f35febfbfbd7",
1637  "0xe3e7298d39a9c7cd224df994d9a6f491a5c9c30f8752457221aed85dab9cebb9b0b59431a102053e9ebd3c3"
1638  },
1639  {
1640  "0x3ac7a7062a50d421ec7b732acfeafd988b5fe95661d371a7f2fdb5b9c1d37e304dd3a0dfcb995e9f99e1b86696b54df83fcd4e87764ffe27fbbd785875c31993f20f4628df79cbaeb50c3dfd132e20935f33ee0276c23f445dff5a075a8198907c1e248787fb28c44495d2e2ed677832432eeda5026afb91467cef4b8",
1641  "0x12659e0b26181845981459681797ab57a50c5b4a34882e973f884d99c1e89c0457b99c9445be077039c60cffa057c608594d38423730d3eae76e8a8db6f946877e90bfecde4aaa320128ef3811cd31c3834e66fa7a61d1454778bf82781c091ae5fd348fd903d85116f83f331d84edaa925d1d65b0b30c1b7c6c69da380",
1642  "0x20860306081044000459600287aa5580085b481400021127804d9181c0900410099080458a0150198000b820168408580d0842073043ea276a88081071420112900f44084a280200200c3811012000834e22ea0260c0054458bf0200180118807c14048103d800044015120084652812410c65a002081b104468ca080",
1643  "0x127fdfaf263a58d5b9fc7b7b3fdfebffbd8f5feb76e9fff7bffafdbdf9e9df7e77fddfb4dfff9f7ebfdfedffe6d7f74df97ffd4eb776dffee7ffbffdfefdc79ffff2bfeefedffbfbafbdef3dfddf3fe3935f77fe7a77d37f477dffda7f5e899af5fd3eafdf87fb79d6fcbff3ffedeffab25f3fedb5b36efbfd6e7dff7b8",
1644  "0x125f59ac20324891b9f8221b3d5841aa3d8704a362e9fde6987ab02c78294f7a67f44f349a759e2ea65fed47c6c17345a172f50cb0469c14c09537f5ee8c859eed62b0aaf695d3f9af9de305ecde1fe3101155147817137a032540d87f46888275812aab5e842379d2bcaae1ff698ad2a01e338815b166e0ed2a1535738"
1645  },
1646  {
1647  "0x39d2210d760b098917fd1293f0708ed6ffcd7686a4041e774a0f52e808524d686429da6774dd45dcf69abb4a7a48116d71f8e38074196cddf128b041a28cdc1e12cf755c7",
1648  "0x59d65c9b948dab08f5c3604fb8b4d15085e4ae6ea8e762bbcceb904b3d9b5837977c4c9f2b9e9f3f8c6babd3b5e846ed8bdad898648bc4f8ccbea95d7a9cf5fd694e6b1a176058fbb30257aafa296741ab7181398c43a264a94972c08b4a5c56807a5f06b5b88eb420df822b43c43b400d0",
1649  "0x284221095208080003c41080b0200c529cc5740004001a17400852a000520868202140237081018c42822008484000094058428070190495b008b00082800802000b400c0",
1650  "0x59d65c9b948dab08f5c3604fb8b4d15085e4ae6ea8e762bbcceb904b3d9b5837977c4c9f2b9e9f3f8c6babd3b5f9d6ed8ffedb99ed9ffdfadffef9dffefffdffefee6f1e776a5ffbfb0a57effa6d6fdbef75dd7ddcf7baffeb7b7ad1ef7bfcf7807e5f6efdf9aeb461ff8eff5fd6ff755d7",
1651  "0x59d65c9b948dab08f5c3604fb8b4d15085e4ae6ea8e762bbcceb904b3d9b5837977c4c9f2b9e9f3f8c6babd3b5d194cc86acd391ed9c39ea5f4ed9d3ac63388befea6f04602a57a95b0a05e7924d4e9bcc055c7c50b538dfe3333ad1e63ba4b5000e466a6849a604617d0ef75dd6f435517"
1652  },
1653  {
1654  "0xcf08fe64414998cc59938913e660f0f9b221f459cd8e04126cf902d0b6cea0edc26164b9d84e9ce7dfe058c1fe0fb452848616368c3",
1655  "0x234286d14c1098ea9fd7f83508641ef3288da679fce09dd1359514ebf0dbcdc73b8f7f6171762d3d5df6492591c9386",
1656  "0x4000910810806090d1b02100400c820000247900c094c0208500616099c84618875f6050402c0d145200041000082",
1657  "0xcf08fe644149bbcedfd3cd13feeafffffa35fc7ddfff2c9feef9fef0bfdfb5fdd6ebf4fbddcfbfefffe179f7ff3ffdf6cda797ffbc7",
1658  "0xcf08fe644149bb8edf42c5037e8a6f2e4a14fc3dd37d2c9fca80fe302b1f9578d68a94621589a768a08129b7d332e9a4cda387ffb45"
1659  },
1660  {
1661  "0x343e32e61b86c0c7cc895cf233ea3d5b5ad65435c1f87e034b59788a9af14ffae9249f1f3cfe0789abbe8edc8ce",
1662  "0x63f7afb1dcebc9d65f9d468754ea558119988cb7d85e427003f2c1d9b360d2c75b97c1308ee3a7b5901044c6353e14f3e6b54a2ead64acdf914c6f7b6d4ed3205abdc78aa7bb47d548607b4ffe1db7331aac39c8bc7fcfd62238467352656a3ad04a423",
1663  "0x241e10440b024046c00058b0038a251b42d4402041487e010311188818c00c7ac9040218047202012a3a8048002",
1664  "0x63f7afb1dcebc9d65f9d468754ea558119988cb7d85e427003f2c1d9b360d2c75b97c1308ee3a7b5901044c6353e14f3e6b54a2ead64bcffb3ee7fffedcfdfa95efff7eabffb5fd75c75fbfffe1fff7b7aaebbf9ffffeff6bf3f7eff57edebbededecef",
1665  "0x63f7afb1dcebc9d65f9d468754ea558119988cb7d85e427003f2c1d9b360d2c75b97c1308ee3a7b5901044c6353e14f3e6b54a2ead6498e1a3aa74fdad891fa9064ff4609ae01d031c55bab7801efc6a6226a339f38526f2bd277a8d55ecc1845e96ced"
1666  },
1667  {
1668  "0x981ba5db1da1fe952887e32cd21d51ba024022c8d837ec00f9772a111f87644012cee4a01f66d09ef168ebdfb91232e9e8f65d63ee7e6e050ae9707e7b15df4f8037b0d8d427f32429a45312a24081ed5a9c8ec22358f3621c961349638f30e049d00d513901fe065d5364f4cfca93f14a2b1b",
1669  "0x1ba08accd8474ea8d9dc2f10d3c2c2edcbf9c3a909ab45",
1670  "0x38000c048400c0019002e00514240e4cbc883a1082b01",
1671  "0x981ba5db1da1fe952887e32cd21d51ba024022c8d837ec00f9772a111f87644012cee4a01f66d09ef168ebdfb91232e9e8f65d63ee7e6e050ae9707e7b15df4f8037b0d8d427f32429a45312a24081ed5a9c8ec22358f3621c9613497bafbaecd9d74ff9f9ddff16dfd3e6fdcffbd3f94bab5f",
1672  "0x981ba5db1da1fe952887e32cd21d51ba024022c8d837ec00f9772a111f87644012cee4a01f66d09ef168ebdfb91232e9e8f65d63ee7e6e050ae9707e7b15df4f8037b0d8d427f32429a45312a24081ed5a9c8ec22358f3621c961349782fba2c919743f9e0ddd1168e91a6190433505843805e"
1673  },
1674  {
1675  "0x1d9992a4fce731fe937e70ec9efba437b1efa9e5459e3145f8c9142c6988eca9a61273750bcc1f00a64b32bab5a3a4c89858231f4fedce7a73bcc7285bbd18b328ccc298919f5511e973cd124f7e1c3912d52f4593c676f1c3f87a521",
1676  "0x6e195204da93bdade43f0622217647326502417d70305d050d988",
1677  "0x421810045011a921c412062200300210250001447030410008100",
1678  "0x1d9992a4fce731fe937e70ec9efba437b1efa9e5459e3145f8c9142c6988eca9a61273750bcc1f00a64b32bab5a3a4c89858231f4fedce7a73bcc7285bbd18b328ccee99d39fdf93fdffed3f4f7e3d7f57f76f47d3ff76f1dffd7fda9",
1679  "0x1d9992a4fce731fe937e70ec9efba437b1efa9e5459e3145f8c9142c6988eca9a61273750bcc1f00a64b32bab5a3a4c89858231f4fedce7a73bcc7285bbd18b328ccac81c39b8f8254de292d495c3d4f55e74a47d2bb06c19efd77ca9"
1680  },
1681  {
1682  "0x123b8aaf5660144d596f10574b4c232f267222596831",
1683  "0x10ab460448ce805f18a3c1d64fc8cc0c02b2cd5f860d462e33602f09fd131e5468c86997e5a033729b2a03d3c284ee0111488ea",
1684  "0x1021028c0600144801270012000c2028066000100820",
1685  "0x10ab460448ce805f18a3c1d64fc8cc0c02b2cd5f860d462e33602f09fd133ffceafd6f97e5f5b7f39f7eb7d3f2f6ef2335de8fb",
1686  "0x10ab460448ce805f18a3c1d64fc8cc0c02b2cd5f860d462e33602f09fd123decc23d0f96a175a5839e5eb711f076892334de0db"
1687  },
1688  {
1689  "0x17529608c59c36277d9e89f9b275032e62ab42b4dc006f1943e12b088c36657b02937109db797e2fbb83c984f507841be083c5e36dd04a8b7d3",
1690  "0x1d556659e3b765044e08b1f7879bf057ef",
1691  "0x1814004940304104080810368500a017c3",
1692  "0x17529608c59c36277d9e89f9b275032e62ab42b4dc006f1943e12b088c36657b02937109db797e2fbbd7dfe5ff3ff65be4e3cfff7df9ff8f7ff",
1693  "0x17529608c59c36277d9e89f9b275032e62ab42b4dc006f1943e12b088c36657b02937109db797e2fba569fe16b3cf24ba4634efc15a9f58e03c"
1694  },
1695  {
1696  "0x23ed0547893da2de2673832f9e6d988ce38c44a47495c1e0a714eb2f18ec455157cc20ea9da75cdcb0c4e9afa546efb3650b7e5cb7e659359d17fe79d2d5116bcd6c5cca45e0719d063e7df33f6788e5c6bd77c114340748cf553c5aa4992076953c4904181e24bb7c26a6e895d8b808c70133b52c9ca4a2266c2e2302bf777",
1697  "0x3eaf5dd3cbba83558163fd16469a3d64905ff28ee65c15ff01f4d720b1ad669a893671bb614382f2331985333b0af52cbc0af22e50e4cb39d4ab3ad58127b3c481e692bb22dc0b497690e57e6fc84a87c2e1eb85e6c8bfc253fd497fc88",
1698  "0x20aa1d83489880448123a50646922500105cb286401415170070d20011294408080241a061010232311105230800c42c340010240040cb11140a2091002691040104101a20980800268085582808420102a12884a48026400221003f400",
1699  "0x23ed0547893da2de2673832f9e6d988ce38c44a47495c1e0a714eb2f18ec455157cc3eefddf7dffeb3d5e9effd56efbb7d6ffe5ff7eeff7d9dfffffdd7f5b1efeffeddfe75fb71df86fe7ffbbf77bbeff7bdffcbf63e57eccf7dfcfbbedda177b7fcc9e69abf26ff7f6ff6f8f5feffc8cf87f3f5ef9de6eabfee7fff4bfffff",
1700  "0x23ed0547893da2de2673832f9e6d988ce38c44a47495c1e0a714eb2f18ec455157cc1e45c0749766339168cc5850a929586fee034568bf6988e8ff8d05f5a0c6abf6d5fc345b10de84cc4eeaba54b3ef3391cbcbe61a57ac046ce8f19e4ca15126f8c8e28aa50667776fd07870a6d7c08d86f154c719426a99ae7dde4bc0bff"
1701  },
1702  {
1703  "0x4881b1172db56487aa0b4362479871a57",
1704  "0xd40bc374f241c2bb638ed6dea08d7885135052619d2f58523b3218b57371993a62bea6cfc8abf4abb8e4a96b0a38bbffffdd0bc5e5a6514f0db",
1705  "0x4081210228b16487880b4160061041053",
1706  "0xd40bc374f241c2bb638ed6dea08d7885135052619d2f58523b3218b57371993a62bea6cfc8abf4abb8eca9fb1f3dbfffffff0bc7e7e7d97fadf",
1707  "0xd40bc374f241c2bb638ed6dea08d7885135052619d2f58523b3218b57371993a62bea6cfc8abf4abb8ac28da1d150e9b7877008687e1c93ea8c"
1708  },
1709  {
1710  "0x1e0e22b43b6de9f7ee3000e87eef492f84ee1bcd3f490cdbf35171b174335fe53afa9b752d9b1e1b0bd58d71d35687cb7b74",
1711  "0xac57c7cfa532414e1182c7c499ffa996f7a28187f7f5d7586f0fd6b64e566bff1ff68daa60d7b650cfece99b8e2551941008aaa5ab966c526d584251600baf9f48d6b573e2779363363cea427961c0ac63d9c9abcc30976c3755b739dcbcccfbb7ae06b5deed54c59a5271caaa26134877898f75b065f3c72a8429ab5",
1712  "0x40602140a4429948a30000876c3410b008c0bcc0f0908c0635160914411052518aa82612483181803510451105280421a34",
1713  "0xac57c7cfa532414e1182c7c499ffa996f7a28187f7f5d7586f0fd6b64e566bff1ff68daa60d7b650cfece99b8e2551941008aaa5ab966c526d584251600baf9f48d6b573e2779363363cebe2fb6bc3beffdfffebcc3e97eef7d7ff7ffdbcdfffb7efbfb5dfff57c7bffe73efabb753d9f7e9bffdf8f7fff76afcbfbf5",
1714  "0xac57c7cfa532414e1182c7c499ffa996f7a28187f7f5d7586f0fd6b64e566bff1ff68daa60d7b650cfece99b8e2551941008aaa5ab966c526d584251600baf9f48d6b573e2779363363ceba29b4a831abd46b748cc3e1082c3c74f773d001f0f2763b980c9f64386afac226503914191c6683fc8e8b2eef242f89e1c1"
1715  },
1716  {
1717  "0x46529c1d4b03b4a0efd29ce200ce9564cdc4fa4b53b9b6725e3fffe3454d6e53848fa573858f0bdbcf846d790a5bfc7470d0b8ac1d494804fa7048b869d5e016e389bf93cb959469dca3f4c5e93f8bcb7dbb64bcec19c8d9dbc5f2cecb285d81f5fefe99ff4564662c7cc275a40f0ea519adb2",
1718  "0x1b10fed79bfd5e52ba14eea13cf223bfbeb5f42bd781083545c4306ed5f69250efc19707288aadf9df45b4056a293da0cfae076ee9b08e7a7058ef0a58e67149980cdc60a75825607ec4e531e9d036e71e3df52048853e3",
1719  "0x1010d6c518485a523810e0a13cf0029790a5b4034701080041c4100045a6000086811601280889f91c01100408083d004e82002ca190864a40408c0818a4510888008440075825601ec4440060c004271a00f02040801a2",
1720  "0x46529c1d4b03b4a0efd29ce200ce9564cdc4fa4b53b9b6725e3fffe3f54fef7bbfdfe57ba5cfebdbcfa67ffbeb5ffefd78d0bbfc5d4b4eedff796dbefdddf076ebabff9fffdfd47ffeb3fecdfbffffefffbbe7bfed9ff8fddfe7f6dfcbeddf8bf5fefe9fff4f777ebd7fee75e7df5ea599fff3",
1721  "0x46529c1d4b03b4a0efd29ce200ce9564cdc4fa4b53b9b6725e3fffe2f442832a3b5a405824c1e1c800a65682e104bec908c03bf8410a4ee9a5196db695cc90646b23600e3fced43f7e302ec913dffd25e6b3831be997387c55a2e6574be59b8b807ca89e130b3778b17fac0447d05ca191fe51"
1722  },
1723  {
1724  "0x1c61ea1ba6135d29a669cc258f24a09ce0c6af1fa717",
1725  "0x277557a8f45578e7730c64350cd3fd389bf96320fb3079402e9949062868fda63a6c371adf34952bd8fbf8a361671041556548ecabc7561f3febfcf26290dc819caa54b8eb26a7fb3a593202b2eb9a87fa214342ea4d639c3487882c7b6a03401d0715171c8ec44d45eff0c2571ca3f556d0d986fbeb5ff",
1726  "0x10416008a4005408a60804218a24000c00802f1ea517",
1727  "0x277557a8f45578e7730c64350cd3fd389bf96320fb3079402e9949062868fda63a6c371adf34952bd8fbf8a361671041556548ecabc7561f3febfcf26290dc819caa54b8eb26a7fb3a593202b2eb9a87fa214342ea4d639c3487882c7b6a03401d07d71fbdbee57dd7fff6ded75cf3ff5fdeddeefbfb7ff",
1728  "0x277557a8f45578e7730c64350cd3fd389bf96320fb3079402e9949062868fda63a6c371adf34952bd8fbf8a361671041556548ecabc7561f3febfcf26290dc819caa54b8eb26a7fb3a593202b2eb9a87fa214342ea4d639c3487882c7b6a03401d06d309bd34a5789775965e954451bf5f1ed5ec0a112e8"
1729  },
1730  {
1731  "0x259856f9c56582b4f8056fdbd37332ff6684ad104683782087ef2b965fa2d22153ca880d735c116878afac5b2477b7f",
1732  "0x1518494828299164e2ee455afe73cd24484df0def1e24c01926bdb2566d44e483a04bbdd5aeab159678305b6ade08cb5bc83e0e63a7bd9e2bb016c355f0fd9e94044e8e9dd380c64ea2f83d239d0987a6864dd1a07c9d742",
1733  "0x20105268c4008210c8040e438331122b2004811040811800044e0a945380c20002c8080111080120000d80002415342",
1734  "0x1518494828299164e2ee455afe73cd24484df0def1e24c01926bdb2566d44e483a04bbdd5aeab15967db85ffbdf6dcbfff83f6ffbf7ffbefff696ef55f6fffeb487efaf9fdfa2d66ff3fabd2fff5d97eefeeffdfb7cfff7f",
1735  "0x1518494828299164e2ee455afe73cd24484df0def1e24c01926bdb2566d44e483a04bbdd5aeab15965da80d931b6d49ef303b61b874ceacd4d6926e45b67ee6b483a1a50b8c22146ff132b52eee5596cefee27dfb58eac3d"
1736  },
1737  {
1738  "0xd8526c4a399bb415b422ab254fb7c9a053c1507e3260aac195366c5fed9ff583053547f1b8f54561838e8d5fff273e25",
1739  "0xdc8169197ca1b7f60394685c3438a5b9ff07c0deafe3d68064567be3d9ad3c577600e0d98c4bda37a6ed8175d437cded052bdf221c4c3d76221331061",
1740  "0x4002480a30180400b42028044527882012c14076200008808434205a6c981501013446d010b540218082854221231021",
1741  "0xdc8169197ca1b7f60394685c3dbda7fdff9ffbdfffe3feb274ff7ffbddbd3d57f726eafd9d5bfef7fefdff7df477ddff1fafdf761c7cfdf7fff373e65",
1742  "0xdc8169197ca1b7f60394685c39bd837d5c9e7b9ff4a1fc3230ad0779dc9129509526ea759518bcf258347e2de46499921ea48b740474d5a3dde142e44"
1743  },
1744  {
1745  "0x47ac96c78ee0c7a9906ce5af63d0ad1b0420e1ca783cc6904ee84",
1746  "0x630297e0f122e36f0c5f2f34efbb078c2f4c00e7c16f96cb054",
1747  "0x20028780e002a1000c452f20c0a90304204000600046904a004",
1748  "0x47ef96d7eef1e7ebff6cffaf77ffbf1f8c2fedcafffdef96cfed4",
1749  "0x47cf94506e11e54aff60ba80573f161c880fadca9ffda90685ed0"
1750  },
1751  {
1752  "0x432a40ea48fcb8b8161bc19a26b544f54833bf5e005c7d1c19e8405c5464c8c139fdd9b627865e596c513fc68454827f070310dd7efe80306693ce441c89a74d91db5e27d6ba966aa1e109cc8385bd86a23d127cf609eea4118e0e1d9be83b561dcffb0ec3844d22",
1753  "0x70d78d38ebcadb77733fc709a6d3b76576ca71acd7e3196640d6adc00225142070b943d5624a3a3d4e77a787d8221848ab06c5135",
1754  "0x50c7880002481864410882008011b560744a212482021004401009c002211020402002c0400820214836838540001800a80044120",
1755  "0x432a40ea48fcb8b8161bc19a26b544f54833bf5e005c7d1c19e8405c5464c8c139fdd9b627865e596c513fc68454827f070310df7ffed3befebfff773ffdf7dffdfb7e77febf9eeffff19fec8feffd86a27d527fff9dfff635afafddfffa7b7f9fefff8ef3ec5d37",
1756  "0x432a40ea48fcb8b8161bc19a26b544f54833bf5e005c7d1c19e8405c5464c8c139fdd9b627865e596c513fc68454827f070310da738653beda3e79332f75d7d7fce02870ba1d8ca7dfd09fa88eef6186806c507bfd9dd3f2352dadc97c92432b9fee7f8473e81c17"
1757  },
1758  {
1759  "0x7c4c2d104ca2a5c080fbf1e717e47f848ff9be3555bcff60c07907ade9e334a556157dcd28ebbfd73367defdc4d8f5de60815360394e4de6e7535d356ccb8a2d896157ba65a7e8541a06e604454aef3e8cebfc7aedb48466eb65039cf17c13fcdb1b",
1760  "0x2a73b2854f05d043d4e28e0b2634fd7023aaf3e57e58f213dd0693769",
1761  "0x2a0100804e00404084e2880a2604ac50000262a45018c213c10681309",
1762  "0x7c4c2d104ca2a5c080fbf1e717e47f848ff9be3555bcff60c07907ade9e334a556157dcd28ebbfd73367defdc4d8f5de60815360394e4de6e7535d356ccb8a2d896157ba65a7ef7f3a56f65d457fef3eecfbff7fffb6beefff77e79ff17dd3fdff7b",
1763  "0x7c4c2d104ca2a5c080fbf1e717e47f848ff9be3555bcff60c07907ade9e334a556157dcd28ebbfd73367defdc4d8f5de60815360394e4de6e7535d356ccb8a2d896157ba65a54f6f325216594177a1166c599f353ab6bec9d532e613d041c395ec72"
1764  },
1765  {
1766  "0x3ee957090c3ab10e1c8af669f2093bba430a4322a741522d2ce1d20b07558298627de3dbbbef8828abc64195bad0f9f6acbb734a420d0d8dd330e90d23ab633826a612060eb95070758199006b547b24792d59f97c3191b2dee7a96e",
1767  "0x7e30cfb7abf89648583c2f705f30abb997ded579a0de3172e2b546c920f92fbdf3bf5ffbd5d73620da518e7b4964a44505817d16c7028f4da494135d2589deffbfdb19f6a454f0431cda1884e51f48c67605f9f044e955a4f23da9dfa92af8dfba09ea6adf0390c",
1768  "0x4e102090838a1061808e20122091028020a02228701502d2c415202050500802014424010480000284000949a4041348018114a420d018d42004904218921080600100406205010040091004b005a0478000989782090a28ce0290c",
1769  "0x7e30cfb7abf89648583c2f73ffb5fbb9d7ffd5f9e8ff77ffe2b7ffed30fd3fbff7bf7ffbdfdf36b0ff59afff6ffebdffbff9ff9eff669f5fad9f9f7fefbffeffbfdbd9ffb75ef0d33efe3b86ef7f68e6ff95fff75cf9d5a6f77fbbdfbbffffdffb19fb6fff7b96e",
1770  "0x7e30cfb7abf89648583c2f73b1a5db295475c598687157edc226fd6d105d1d9787aa7d291bca1690af09a7fd6eba99febb79ff9c7b669616099b8c37ee3eea5b9f0bc12b975a6091266c2b068f7e68a69d90fef71cf0c5a2477a1b983bff67487910f1473179062"
1771  },
1772  {
1773  "0x20265b43c9319cd56eac6a02cbf7913ba44b",
1774  "0x995b92e854a8e0d548bfc02e18529b37790f0e4d9aaf36e7abc4a0f1e6d69489215aaa61b5863b1c86b3536b443dc639d1eb3db7789c2cb2f8cad1a74e5168ef33948c81a06fbad3b9ab0b7c84045cd1f77620ef43c7f2088d2901917bec5346a44f679be9491d273dbe5bf6e39095bb411cac63e38626013d671445c",
1775  "0x20261901493010c0462c2802401390310448",
1776  "0x995b92e854a8e0d548bfc02e18529b37790f0e4d9aaf36e7abc4a0f1e6d69489215aaa61b5863b1c86b3536b443dc639d1eb3db7789c2cb2f8cad1a74e5168ef33948c81a06fbad3b9ab0b7c84045cd1f77620ef43c7f2088d2901917bec5346a44f679be9491d273dbe5bf6e7b4bdbb59ddfeebe7a62ebf7d77be45f",
1777  "0x995b92e854a8e0d548bfc02e18529b37790f0e4d9aaf36e7abc4a0f1e6d69489215aaa61b5863b1c86b3536b443dc639d1eb3db7789c2cb2f8cad1a74e5168ef33948c81a06fbad3b9ab0b7c84045cd1f77620ef43c7f2088d2901917bec5346a44f679be9491d273dbe59f48624a92858d1fa8925260abe4474ae017"
1778  },
1779  {
1780  "0x20a92c71c161a786989694109718416d7a291b8f9c71a5a71ee827e003a5a19cf2aa8faeecbfa231c330e2d4c747b75ccc4d43d8c37472b60",
1781  "0xc2ba3ef844b62f020cd6e4b010499c2c28ab3c15ed2ef3114e5b806244e57be1a7d999a21399c1e950977f021c82a906bed39caeec6aa077628421f9d5dfed01b24fe857000e259537fbe07d6a83080080ae927512d4518f9a56f0a40376234855377d8ef40dcb6055bd8d351",
1782  "0x20282071400021809096840092084045000801851471a0250a80000000a480141280018e8816a020033022404507350cc40d4340413400340",
1783  "0xc2ba3ef844b62f020cd6e4b010499c2c28ab3c15ed2ef3114e5b806244e57be1a7d999a21399c1e950977f021c82a906bed39caeecebac77e3e5a7ffdddffd11b75fe97f7a2f3f9fbffbe5ff7eeb2fe083afb3fdf2fedfaffefff2b5c376e3dcd777ffdefc4dcbf8d7fdffb71",
1784  "0xc2ba3ef844b62f020cd6e4b010499c2c28ab3c15ed2ef3114e5b806244e57be1a7d999a21399c1e950977f021c82a906bed39caeccc38c06a3e5867f4d4979112557a93a7a273e1aab8a45da746b2fe0830b33e9e07ede2176e95295c046c19c9270cad2384088b896c9ff831"
1785  },
1786  {
1787  "0xf6b7f399370d10b097b17e514f044d77a8f170148f4837033bb5d425f73a4079e1c7a9c3e69246f902d8c9fd27caad1e93d83578d4af8d3b7b1c02041c44917a22ed56f2562ac1426a356f8d31965e8e367b8929f3907b1dc6e73a8f3a566ca5c4e113e9d2c53770b110df51cf504701ff3fcea5b819b9bfc49f",
1788  "0x61989df2b7097a6a84dc016aec2716d9cac359d2d799d90ec006a66efe3f1fd0851978c4cfe2f64b307b852e23f5dfdc2f63196e1076782a228a46f5f7d4e54afc1ad7abf1f8fef46edaad1706956f95eb95953bd4",
1789  "0x990290097822808c0002c82510d08a8119521400000c40002222ec1612500001404005628401105a8426238109d0006319460032082a020804c4e110e142c41250a110d850c440420117068425900991950094",
1790  "0xf6b7f399370d10b097b17e514f044d77a8f170148f4837033bb5d425f73a4079e1c7a9c3e6f3defdf2ffc9ff6fcefd1ffbfc377eddefcf7bfbdf9bdd1ec497fe6eff7fffd6afd97aeeffefff7bb67f8f3e7bfdffffbf7b1deef77eff3a76eee7f5f7d7eddafd3ff7bbf1ffffff7edfadff3fdfefbdfbbdbfffdf",
1791  "0xf6b7f399370d10b097b17e514f044d77a8f170148f4837033bb5d425f73a4079e1c7a9c3e6f3de64f06fc0874d4e711ff934126e0d654e62a9cb9bdd128497dc4c1369ed86afd83aaefa8d7b7aa6250b18587cf62fbf1804a8f74cf71074e6e33116c70c98392da71ae127af3b3e9dace8395bca2df22c2aff4b"
1792  },
1793  {
1794  "0x31d126e874580b754389fad8b64aaa61cabb4f8eb6904fe7e504341ed903f7daa3e74d4da3afca80b2415672a",
1795  "0x16fb17a0468c0afa6bad456efa4f9baf26860eda9d7c00c2520c8c9b6026fb50df59b8cb74f6d9be861052c5e831158e7ffd98746328ce11f91d9ea22f0803a8b059aea22d1715ca1abeae53a8bc6b8bfb9b6c9d24ae714767",
1796  "0x11100e0745803440288e0189048aa20c0800a8a04904a22c10014008902e51a83c6080da1a6c880024114722",
1797  "0x16fb17a0468c0afa6bad456efa4f9baf26860eda9d7c00c2520c8c9b6026fb50df59b8cb74f6d9be861052c5eb3d17eefffd98f77738dfbdfb7dbea63fabb7f8fb79aefe7f5757cbffbebf7faabe7fdffbbbfcbd2fae75676f",
1798  "0x16fb17a0468c0afa6bad456efa4f9baf26860eda9d7c00c2520c8c9b6026fb50df59b8cb74f6d9be861052c5eb2c07e0f8b818c3371051bc7279340433a3b7505b30aa5c5347568bf72e912e02821f5f21a190352f8a64204d"
1799  },
1800  {
1801  "0xbf1a14e469c234b72d56324d100e016bc38cdf7158e35f230c047585e7b107acc8e222e7f19552541e59316affd90e96ca657b6112f5e8c786dfcff342fc46252fcdab10c632578540dbf6235f164bc5711924c7c6ba9da85ab",
1802  "0x5dd3fb9a3de26cd89eb9517af6bb25678f149f906e8751a0c20d7646d21c17191237022a990e0156541e376986fd6a680c60228e5955df08bae5789c81751cdcafe5a2e72d45b09",
1803  "0x5d5158821d220c001481413006a800620204919042041000000876400214020112210220880600564412026806252a480800020251054008b22158140145101824c582a20d00109",
1804  "0xbf1a14e469c234b72d56324d100e016bc38cdff3fbfb7fe36cdcffbdf7fbf7bfede7aff7ff957ed75ff9f36fffdfde9edf7d7b7712fff9cf87dfdfff77fdc6fd6fedaf70e6be5fd5dfdbfee77f9ecbf57dddafe7e6ffbdedfab",
1805  "0xbf1a14e469c234b72d56324d100e016bc38c82a2a37962c160dceb3cb6cbf117ed85adf36e053cd34ff9f367899fdc8add7c695610df71c987899bed7595c0d845a5a770e4bc0ed09fd34cc6278acab06dc58b22645db0edea2"
1806  },
1807  };
1808 
1809  bool opa=true, opo=true, opx=true;
1810 
1812 
1813  for (size_t i=0; i<COUNTOF(tests); i++)
1814  {
1815  Integer m(tests[i].m), n(tests[i].n), a(tests[i].a);
1816 
1817  opa &= ((m & n) == a);
1818  opa &= ((-m & n) == a);
1819  opa &= ((m & -n) == a);
1820  opa &= ((-m & -n) == a);
1821 
1822  Integer t(m); t &= n;
1823  opa &= (t == a);
1824  t = n; t &= m;
1825  opa &= (t == a);
1826 
1827  opa &= ((m & m) == m);
1828  opa &= ((n & n) == n);
1829  }
1830 
1831  if (opa)
1832  std::cout << "passed: ";
1833  else
1834  std::cout << "FAILED: ";
1835  std::cout << "Bitwise AND over 32-bits to 1024-bits" << std::endl;
1836 
1838 
1839  for (size_t i=0; i<COUNTOF(tests); i++)
1840  {
1841  Integer m(tests[i].m), n(tests[i].n), o(tests[i].o);
1842 
1843  opo &= ((m | n) == o);
1844  opo &= ((-m | n) == o);
1845  opo &= ((m | -n) == o);
1846  opo &= ((-m | -n) == o);
1847 
1848  Integer t(m); t |= n;
1849  opo &= (t == o);
1850  t = n; t |= m;
1851  opo &= (t == o);
1852 
1853  opo &= ((m | m) == m);
1854  opo &= ((n | n) == n);
1855  }
1856 
1857  if (opo)
1858  std::cout << "passed: ";
1859  else
1860  std::cout << "FAILED: ";
1861  std::cout << "Bitwise OR over 32-bits to 1024-bits" << std::endl;
1862 
1864 
1865  for (size_t i=0; i<COUNTOF(tests); i++)
1866  {
1867  Integer m(tests[i].m), n(tests[i].n), x(tests[i].x);
1868 
1869  opx &= ((m ^ n) == x);
1870  opx &= ((-m ^ n) == x);
1871  opx &= ((m ^ -n) == x);
1872  opx &= ((-m ^ -n) == x);
1873 
1874  Integer t(m); t ^= n;
1875  opx &= (t == x);
1876  t = n; t ^= m;
1877  opx &= (t == x);
1878 
1879  opx &= ((m ^ m) == Integer::Zero());
1880  opx &= ((n ^ n) == Integer::Zero());
1881  }
1882 
1883  if (opx)
1884  std::cout << "passed: ";
1885  else
1886  std::cout << "FAILED: ";
1887  std::cout << "Bitwise XOR over 32-bits to 1024-bits" << std::endl;
1888 
1889  return opa && opo && opx;
1890 }
1891 #endif
Base class for all exceptions thrown by the library.
Definition: cryptlib.h:140
#define COUNTOF(x)
Definition: misc.h:175
Append input to a string object.
Pointer-based implementation of the Source interface.
uint8_t byte
Definition: Common.h:57
Stack-based SecBlock that grows into the heap.
Definition: secblock.h:776
size_t BERDecodeBitString(BufferedTransformation &bt, SecByteBlock &str, unsigned int &unusedBits)
DER decode bit string.
Definition: asn.cpp:188
Definition: asn.h:30
Converts given data to base 16.
Definition: hex.h:16
size_t count
Definition: ExecStats.cpp:37
void BERDecodeUnsigned(BufferedTransformation &in, T &w, byte asnTag=INTEGER, T minValue=0, T maxValue=T(0xffffffff))
BER Decode unsigned value.
Definition: asn.h:491
CRYPTOPP_CONSTEXPR size_type max_size() const
Returns the maximum number of elements the allocator can provide.
Definition: secblock.h:55
#define c(i)
size_t BERDecodeOctetString(BufferedTransformation &bt, SecByteBlock &str)
BER decode octet string.
Definition: asn.cpp:117
DEFLATE compression and decompression (RFC 1951)
size_t BERDecodeTextString(BufferedTransformation &bt, std::string &str, byte asnTag)
BER decode text string.
Definition: asn.cpp:159
Classes and functions for secure memory allocations.
#define a(i)
#define x(i)
Definition: asn.h:46
static void GenerateCodeLengths(unsigned int *codeBits, unsigned int maxCodeBits, const unsigned int *codeCounts, size_t nCodes)
Definition: zdeflate.cpp:119
const char * name
Definition: rest.cpp:36
Classes for HexEncoder and HexDecoder.
ExecStats::duration max
Definition: ExecStats.cpp:36
#define W64LIT(x)
Definition: config.h:241
void Assign(const T *ptr, size_type len)
Set contents and size from an array.
Definition: secblock.h:544
Multiple precision integer with arithmetic operations.
Definition: integer.h:43
unsigned long long word64
Definition: config.h:240
#define b(i, j)
const char * REJECT
The reject message informs the receiving node that one of its previous messages has been rejected...
Definition: protocol.cpp:35
Classes and functions for working with ANS.1 objects.
Implementation of BufferedTransformation&#39;s attachment interface.
#define USING_NAMESPACE(x)
Definition: config.h:206
#define pass(a, b, c, mul, X)
uint8_t byte
Definition: Common.h:10
Multiple precision integer with arithmetic operations.
static const Integer &CRYPTOPP_API Zero()
Integer representing 0.
Definition: integer.cpp:3027
size_type SizeInBytes() const
Provides the number of bytes in the SecBlock.
Definition: secblock.h:538
BER General Decoder.
Definition: asn.h:246
unsigned int word32
Definition: config.h:231
uint8_t const * data
Definition: sha3.h:19
Definition: asn.h:31