linux/lib/crc32test.c
<<
>>
Prefs
   1/*
   2 * Aug 8, 2011 Bob Pearson with help from Joakim Tjernlund and George Spelvin
   3 * cleaned up code to current version of sparse and added the slicing-by-8
   4 * algorithm to the closely similar existing slicing-by-4 algorithm.
   5 *
   6 * Oct 15, 2000 Matt Domsch <Matt_Domsch@dell.com>
   7 * Nicer crc32 functions/docs submitted by linux@horizon.com.  Thanks!
   8 * Code was from the public domain, copyright abandoned.  Code was
   9 * subsequently included in the kernel, thus was re-licensed under the
  10 * GNU GPL v2.
  11 *
  12 * Oct 12, 2000 Matt Domsch <Matt_Domsch@dell.com>
  13 * Same crc32 function was used in 5 other places in the kernel.
  14 * I made one version, and deleted the others.
  15 * There are various incantations of crc32().  Some use a seed of 0 or ~0.
  16 * Some xor at the end with ~0.  The generic crc32() function takes
  17 * seed as an argument, and doesn't xor at the end.  Then individual
  18 * users can do whatever they need.
  19 *   drivers/net/smc9194.c uses seed ~0, doesn't xor with ~0.
  20 *   fs/jffs2 uses seed 0, doesn't xor with ~0.
  21 *   fs/partitions/efi.c uses seed ~0, xor's with ~0.
  22 *
  23 * This source code is licensed under the GNU General Public License,
  24 * Version 2.  See the file COPYING for more details.
  25 */
  26
  27#include <linux/crc32.h>
  28#include <linux/module.h>
  29#include <linux/sched.h>
  30
  31#include "crc32defs.h"
  32
  33/* 4096 random bytes */
  34static u8 const __aligned(8) test_buf[] __initconst =
  35{
  36        0x5b, 0x85, 0x21, 0xcb, 0x09, 0x68, 0x7d, 0x30,
  37        0xc7, 0x69, 0xd7, 0x30, 0x92, 0xde, 0x59, 0xe4,
  38        0xc9, 0x6e, 0x8b, 0xdb, 0x98, 0x6b, 0xaa, 0x60,
  39        0xa8, 0xb5, 0xbc, 0x6c, 0xa9, 0xb1, 0x5b, 0x2c,
  40        0xea, 0xb4, 0x92, 0x6a, 0x3f, 0x79, 0x91, 0xe4,
  41        0xe9, 0x70, 0x51, 0x8c, 0x7f, 0x95, 0x6f, 0x1a,
  42        0x56, 0xa1, 0x5c, 0x27, 0x03, 0x67, 0x9f, 0x3a,
  43        0xe2, 0x31, 0x11, 0x29, 0x6b, 0x98, 0xfc, 0xc4,
  44        0x53, 0x24, 0xc5, 0x8b, 0xce, 0x47, 0xb2, 0xb9,
  45        0x32, 0xcb, 0xc1, 0xd0, 0x03, 0x57, 0x4e, 0xd4,
  46        0xe9, 0x3c, 0xa1, 0x63, 0xcf, 0x12, 0x0e, 0xca,
  47        0xe1, 0x13, 0xd1, 0x93, 0xa6, 0x88, 0x5c, 0x61,
  48        0x5b, 0xbb, 0xf0, 0x19, 0x46, 0xb4, 0xcf, 0x9e,
  49        0xb6, 0x6b, 0x4c, 0x3a, 0xcf, 0x60, 0xf9, 0x7a,
  50        0x8d, 0x07, 0x63, 0xdb, 0x40, 0xe9, 0x0b, 0x6f,
  51        0xad, 0x97, 0xf1, 0xed, 0xd0, 0x1e, 0x26, 0xfd,
  52        0xbf, 0xb7, 0xc8, 0x04, 0x94, 0xf8, 0x8b, 0x8c,
  53        0xf1, 0xab, 0x7a, 0xd4, 0xdd, 0xf3, 0xe8, 0x88,
  54        0xc3, 0xed, 0x17, 0x8a, 0x9b, 0x40, 0x0d, 0x53,
  55        0x62, 0x12, 0x03, 0x5f, 0x1b, 0x35, 0x32, 0x1f,
  56        0xb4, 0x7b, 0x93, 0x78, 0x0d, 0xdb, 0xce, 0xa4,
  57        0xc0, 0x47, 0xd5, 0xbf, 0x68, 0xe8, 0x5d, 0x74,
  58        0x8f, 0x8e, 0x75, 0x1c, 0xb2, 0x4f, 0x9a, 0x60,
  59        0xd1, 0xbe, 0x10, 0xf4, 0x5c, 0xa1, 0x53, 0x09,
  60        0xa5, 0xe0, 0x09, 0x54, 0x85, 0x5c, 0xdc, 0x07,
  61        0xe7, 0x21, 0x69, 0x7b, 0x8a, 0xfd, 0x90, 0xf1,
  62        0x22, 0xd0, 0xb4, 0x36, 0x28, 0xe6, 0xb8, 0x0f,
  63        0x39, 0xde, 0xc8, 0xf3, 0x86, 0x60, 0x34, 0xd2,
  64        0x5e, 0xdf, 0xfd, 0xcf, 0x0f, 0xa9, 0x65, 0xf0,
  65        0xd5, 0x4d, 0x96, 0x40, 0xe3, 0xdf, 0x3f, 0x95,
  66        0x5a, 0x39, 0x19, 0x93, 0xf4, 0x75, 0xce, 0x22,
  67        0x00, 0x1c, 0x93, 0xe2, 0x03, 0x66, 0xf4, 0x93,
  68        0x73, 0x86, 0x81, 0x8e, 0x29, 0x44, 0x48, 0x86,
  69        0x61, 0x7c, 0x48, 0xa3, 0x43, 0xd2, 0x9c, 0x8d,
  70        0xd4, 0x95, 0xdd, 0xe1, 0x22, 0x89, 0x3a, 0x40,
  71        0x4c, 0x1b, 0x8a, 0x04, 0xa8, 0x09, 0x69, 0x8b,
  72        0xea, 0xc6, 0x55, 0x8e, 0x57, 0xe6, 0x64, 0x35,
  73        0xf0, 0xc7, 0x16, 0x9f, 0x5d, 0x5e, 0x86, 0x40,
  74        0x46, 0xbb, 0xe5, 0x45, 0x88, 0xfe, 0xc9, 0x63,
  75        0x15, 0xfb, 0xf5, 0xbd, 0x71, 0x61, 0xeb, 0x7b,
  76        0x78, 0x70, 0x07, 0x31, 0x03, 0x9f, 0xb2, 0xc8,
  77        0xa7, 0xab, 0x47, 0xfd, 0xdf, 0xa0, 0x78, 0x72,
  78        0xa4, 0x2a, 0xe4, 0xb6, 0xba, 0xc0, 0x1e, 0x86,
  79        0x71, 0xe6, 0x3d, 0x18, 0x37, 0x70, 0xe6, 0xff,
  80        0xe0, 0xbc, 0x0b, 0x22, 0xa0, 0x1f, 0xd3, 0xed,
  81        0xa2, 0x55, 0x39, 0xab, 0xa8, 0x13, 0x73, 0x7c,
  82        0x3f, 0xb2, 0xd6, 0x19, 0xac, 0xff, 0x99, 0xed,
  83        0xe8, 0xe6, 0xa6, 0x22, 0xe3, 0x9c, 0xf1, 0x30,
  84        0xdc, 0x01, 0x0a, 0x56, 0xfa, 0xe4, 0xc9, 0x99,
  85        0xdd, 0xa8, 0xd8, 0xda, 0x35, 0x51, 0x73, 0xb4,
  86        0x40, 0x86, 0x85, 0xdb, 0x5c, 0xd5, 0x85, 0x80,
  87        0x14, 0x9c, 0xfd, 0x98, 0xa9, 0x82, 0xc5, 0x37,
  88        0xff, 0x32, 0x5d, 0xd0, 0x0b, 0xfa, 0xdc, 0x04,
  89        0x5e, 0x09, 0xd2, 0xca, 0x17, 0x4b, 0x1a, 0x8e,
  90        0x15, 0xe1, 0xcc, 0x4e, 0x52, 0x88, 0x35, 0xbd,
  91        0x48, 0xfe, 0x15, 0xa0, 0x91, 0xfd, 0x7e, 0x6c,
  92        0x0e, 0x5d, 0x79, 0x1b, 0x81, 0x79, 0xd2, 0x09,
  93        0x34, 0x70, 0x3d, 0x81, 0xec, 0xf6, 0x24, 0xbb,
  94        0xfb, 0xf1, 0x7b, 0xdf, 0x54, 0xea, 0x80, 0x9b,
  95        0xc7, 0x99, 0x9e, 0xbd, 0x16, 0x78, 0x12, 0x53,
  96        0x5e, 0x01, 0xa7, 0x4e, 0xbd, 0x67, 0xe1, 0x9b,
  97        0x4c, 0x0e, 0x61, 0x45, 0x97, 0xd2, 0xf0, 0x0f,
  98        0xfe, 0x15, 0x08, 0xb7, 0x11, 0x4c, 0xe7, 0xff,
  99        0x81, 0x53, 0xff, 0x91, 0x25, 0x38, 0x7e, 0x40,
 100        0x94, 0xe5, 0xe0, 0xad, 0xe6, 0xd9, 0x79, 0xb6,
 101        0x92, 0xc9, 0xfc, 0xde, 0xc3, 0x1a, 0x23, 0xbb,
 102        0xdd, 0xc8, 0x51, 0x0c, 0x3a, 0x72, 0xfa, 0x73,
 103        0x6f, 0xb7, 0xee, 0x61, 0x39, 0x03, 0x01, 0x3f,
 104        0x7f, 0x94, 0x2e, 0x2e, 0xba, 0x3a, 0xbb, 0xb4,
 105        0xfa, 0x6a, 0x17, 0xfe, 0xea, 0xef, 0x5e, 0x66,
 106        0x97, 0x3f, 0x32, 0x3d, 0xd7, 0x3e, 0xb1, 0xf1,
 107        0x6c, 0x14, 0x4c, 0xfd, 0x37, 0xd3, 0x38, 0x80,
 108        0xfb, 0xde, 0xa6, 0x24, 0x1e, 0xc8, 0xca, 0x7f,
 109        0x3a, 0x93, 0xd8, 0x8b, 0x18, 0x13, 0xb2, 0xe5,
 110        0xe4, 0x93, 0x05, 0x53, 0x4f, 0x84, 0x66, 0xa7,
 111        0x58, 0x5c, 0x7b, 0x86, 0x52, 0x6d, 0x0d, 0xce,
 112        0xa4, 0x30, 0x7d, 0xb6, 0x18, 0x9f, 0xeb, 0xff,
 113        0x22, 0xbb, 0x72, 0x29, 0xb9, 0x44, 0x0b, 0x48,
 114        0x1e, 0x84, 0x71, 0x81, 0xe3, 0x6d, 0x73, 0x26,
 115        0x92, 0xb4, 0x4d, 0x2a, 0x29, 0xb8, 0x1f, 0x72,
 116        0xed, 0xd0, 0xe1, 0x64, 0x77, 0xea, 0x8e, 0x88,
 117        0x0f, 0xef, 0x3f, 0xb1, 0x3b, 0xad, 0xf9, 0xc9,
 118        0x8b, 0xd0, 0xac, 0xc6, 0xcc, 0xa9, 0x40, 0xcc,
 119        0x76, 0xf6, 0x3b, 0x53, 0xb5, 0x88, 0xcb, 0xc8,
 120        0x37, 0xf1, 0xa2, 0xba, 0x23, 0x15, 0x99, 0x09,
 121        0xcc, 0xe7, 0x7a, 0x3b, 0x37, 0xf7, 0x58, 0xc8,
 122        0x46, 0x8c, 0x2b, 0x2f, 0x4e, 0x0e, 0xa6, 0x5c,
 123        0xea, 0x85, 0x55, 0xba, 0x02, 0x0e, 0x0e, 0x48,
 124        0xbc, 0xe1, 0xb1, 0x01, 0x35, 0x79, 0x13, 0x3d,
 125        0x1b, 0xc0, 0x53, 0x68, 0x11, 0xe7, 0x95, 0x0f,
 126        0x9d, 0x3f, 0x4c, 0x47, 0x7b, 0x4d, 0x1c, 0xae,
 127        0x50, 0x9b, 0xcb, 0xdd, 0x05, 0x8d, 0x9a, 0x97,
 128        0xfd, 0x8c, 0xef, 0x0c, 0x1d, 0x67, 0x73, 0xa8,
 129        0x28, 0x36, 0xd5, 0xb6, 0x92, 0x33, 0x40, 0x75,
 130        0x0b, 0x51, 0xc3, 0x64, 0xba, 0x1d, 0xc2, 0xcc,
 131        0xee, 0x7d, 0x54, 0x0f, 0x27, 0x69, 0xa7, 0x27,
 132        0x63, 0x30, 0x29, 0xd9, 0xc8, 0x84, 0xd8, 0xdf,
 133        0x9f, 0x68, 0x8d, 0x04, 0xca, 0xa6, 0xc5, 0xc7,
 134        0x7a, 0x5c, 0xc8, 0xd1, 0xcb, 0x4a, 0xec, 0xd0,
 135        0xd8, 0x20, 0x69, 0xc5, 0x17, 0xcd, 0x78, 0xc8,
 136        0x75, 0x23, 0x30, 0x69, 0xc9, 0xd4, 0xea, 0x5c,
 137        0x4f, 0x6b, 0x86, 0x3f, 0x8b, 0xfe, 0xee, 0x44,
 138        0xc9, 0x7c, 0xb7, 0xdd, 0x3e, 0xe5, 0xec, 0x54,
 139        0x03, 0x3e, 0xaa, 0x82, 0xc6, 0xdf, 0xb2, 0x38,
 140        0x0e, 0x5d, 0xb3, 0x88, 0xd9, 0xd3, 0x69, 0x5f,
 141        0x8f, 0x70, 0x8a, 0x7e, 0x11, 0xd9, 0x1e, 0x7b,
 142        0x38, 0xf1, 0x42, 0x1a, 0xc0, 0x35, 0xf5, 0xc7,
 143        0x36, 0x85, 0xf5, 0xf7, 0xb8, 0x7e, 0xc7, 0xef,
 144        0x18, 0xf1, 0x63, 0xd6, 0x7a, 0xc6, 0xc9, 0x0e,
 145        0x4d, 0x69, 0x4f, 0x84, 0xef, 0x26, 0x41, 0x0c,
 146        0xec, 0xc7, 0xe0, 0x7e, 0x3c, 0x67, 0x01, 0x4c,
 147        0x62, 0x1a, 0x20, 0x6f, 0xee, 0x47, 0x4d, 0xc0,
 148        0x99, 0x13, 0x8d, 0x91, 0x4a, 0x26, 0xd4, 0x37,
 149        0x28, 0x90, 0x58, 0x75, 0x66, 0x2b, 0x0a, 0xdf,
 150        0xda, 0xee, 0x92, 0x25, 0x90, 0x62, 0x39, 0x9e,
 151        0x44, 0x98, 0xad, 0xc1, 0x88, 0xed, 0xe4, 0xb4,
 152        0xaf, 0xf5, 0x8c, 0x9b, 0x48, 0x4d, 0x56, 0x60,
 153        0x97, 0x0f, 0x61, 0x59, 0x9e, 0xa6, 0x27, 0xfe,
 154        0xc1, 0x91, 0x15, 0x38, 0xb8, 0x0f, 0xae, 0x61,
 155        0x7d, 0x26, 0x13, 0x5a, 0x73, 0xff, 0x1c, 0xa3,
 156        0x61, 0x04, 0x58, 0x48, 0x55, 0x44, 0x11, 0xfe,
 157        0x15, 0xca, 0xc3, 0xbd, 0xca, 0xc5, 0xb4, 0x40,
 158        0x5d, 0x1b, 0x7f, 0x39, 0xb5, 0x9c, 0x35, 0xec,
 159        0x61, 0x15, 0x32, 0x32, 0xb8, 0x4e, 0x40, 0x9f,
 160        0x17, 0x1f, 0x0a, 0x4d, 0xa9, 0x91, 0xef, 0xb7,
 161        0xb0, 0xeb, 0xc2, 0x83, 0x9a, 0x6c, 0xd2, 0x79,
 162        0x43, 0x78, 0x5e, 0x2f, 0xe5, 0xdd, 0x1a, 0x3c,
 163        0x45, 0xab, 0x29, 0x40, 0x3a, 0x37, 0x5b, 0x6f,
 164        0xd7, 0xfc, 0x48, 0x64, 0x3c, 0x49, 0xfb, 0x21,
 165        0xbe, 0xc3, 0xff, 0x07, 0xfb, 0x17, 0xe9, 0xc9,
 166        0x0c, 0x4c, 0x5c, 0x15, 0x9e, 0x8e, 0x22, 0x30,
 167        0x0a, 0xde, 0x48, 0x7f, 0xdb, 0x0d, 0xd1, 0x2b,
 168        0x87, 0x38, 0x9e, 0xcc, 0x5a, 0x01, 0x16, 0xee,
 169        0x75, 0x49, 0x0d, 0x30, 0x01, 0x34, 0x6a, 0xb6,
 170        0x9a, 0x5a, 0x2a, 0xec, 0xbb, 0x48, 0xac, 0xd3,
 171        0x77, 0x83, 0xd8, 0x08, 0x86, 0x4f, 0x48, 0x09,
 172        0x29, 0x41, 0x79, 0xa1, 0x03, 0x12, 0xc4, 0xcd,
 173        0x90, 0x55, 0x47, 0x66, 0x74, 0x9a, 0xcc, 0x4f,
 174        0x35, 0x8c, 0xd6, 0x98, 0xef, 0xeb, 0x45, 0xb9,
 175        0x9a, 0x26, 0x2f, 0x39, 0xa5, 0x70, 0x6d, 0xfc,
 176        0xb4, 0x51, 0xee, 0xf4, 0x9c, 0xe7, 0x38, 0x59,
 177        0xad, 0xf4, 0xbc, 0x46, 0xff, 0x46, 0x8e, 0x60,
 178        0x9c, 0xa3, 0x60, 0x1d, 0xf8, 0x26, 0x72, 0xf5,
 179        0x72, 0x9d, 0x68, 0x80, 0x04, 0xf6, 0x0b, 0xa1,
 180        0x0a, 0xd5, 0xa7, 0x82, 0x3a, 0x3e, 0x47, 0xa8,
 181        0x5a, 0xde, 0x59, 0x4f, 0x7b, 0x07, 0xb3, 0xe9,
 182        0x24, 0x19, 0x3d, 0x34, 0x05, 0xec, 0xf1, 0xab,
 183        0x6e, 0x64, 0x8f, 0xd3, 0xe6, 0x41, 0x86, 0x80,
 184        0x70, 0xe3, 0x8d, 0x60, 0x9c, 0x34, 0x25, 0x01,
 185        0x07, 0x4d, 0x19, 0x41, 0x4e, 0x3d, 0x5c, 0x7e,
 186        0xa8, 0xf5, 0xcc, 0xd5, 0x7b, 0xe2, 0x7d, 0x3d,
 187        0x49, 0x86, 0x7d, 0x07, 0xb7, 0x10, 0xe3, 0x35,
 188        0xb8, 0x84, 0x6d, 0x76, 0xab, 0x17, 0xc6, 0x38,
 189        0xb4, 0xd3, 0x28, 0x57, 0xad, 0xd3, 0x88, 0x5a,
 190        0xda, 0xea, 0xc8, 0x94, 0xcc, 0x37, 0x19, 0xac,
 191        0x9c, 0x9f, 0x4b, 0x00, 0x15, 0xc0, 0xc8, 0xca,
 192        0x1f, 0x15, 0xaa, 0xe0, 0xdb, 0xf9, 0x2f, 0x57,
 193        0x1b, 0x24, 0xc7, 0x6f, 0x76, 0x29, 0xfb, 0xed,
 194        0x25, 0x0d, 0xc0, 0xfe, 0xbd, 0x5a, 0xbf, 0x20,
 195        0x08, 0x51, 0x05, 0xec, 0x71, 0xa3, 0xbf, 0xef,
 196        0x5e, 0x99, 0x75, 0xdb, 0x3c, 0x5f, 0x9a, 0x8c,
 197        0xbb, 0x19, 0x5c, 0x0e, 0x93, 0x19, 0xf8, 0x6a,
 198        0xbc, 0xf2, 0x12, 0x54, 0x2f, 0xcb, 0x28, 0x64,
 199        0x88, 0xb3, 0x92, 0x0d, 0x96, 0xd1, 0xa6, 0xe4,
 200        0x1f, 0xf1, 0x4d, 0xa4, 0xab, 0x1c, 0xee, 0x54,
 201        0xf2, 0xad, 0x29, 0x6d, 0x32, 0x37, 0xb2, 0x16,
 202        0x77, 0x5c, 0xdc, 0x2e, 0x54, 0xec, 0x75, 0x26,
 203        0xc6, 0x36, 0xd9, 0x17, 0x2c, 0xf1, 0x7a, 0xdc,
 204        0x4b, 0xf1, 0xe2, 0xd9, 0x95, 0xba, 0xac, 0x87,
 205        0xc1, 0xf3, 0x8e, 0x58, 0x08, 0xd8, 0x87, 0x60,
 206        0xc9, 0xee, 0x6a, 0xde, 0xa4, 0xd2, 0xfc, 0x0d,
 207        0xe5, 0x36, 0xc4, 0x5c, 0x52, 0xb3, 0x07, 0x54,
 208        0x65, 0x24, 0xc1, 0xb1, 0xd1, 0xb1, 0x53, 0x13,
 209        0x31, 0x79, 0x7f, 0x05, 0x76, 0xeb, 0x37, 0x59,
 210        0x15, 0x2b, 0xd1, 0x3f, 0xac, 0x08, 0x97, 0xeb,
 211        0x91, 0x98, 0xdf, 0x6c, 0x09, 0x0d, 0x04, 0x9f,
 212        0xdc, 0x3b, 0x0e, 0x60, 0x68, 0x47, 0x23, 0x15,
 213        0x16, 0xc6, 0x0b, 0x35, 0xf8, 0x77, 0xa2, 0x78,
 214        0x50, 0xd4, 0x64, 0x22, 0x33, 0xff, 0xfb, 0x93,
 215        0x71, 0x46, 0x50, 0x39, 0x1b, 0x9c, 0xea, 0x4e,
 216        0x8d, 0x0c, 0x37, 0xe5, 0x5c, 0x51, 0x3a, 0x31,
 217        0xb2, 0x85, 0x84, 0x3f, 0x41, 0xee, 0xa2, 0xc1,
 218        0xc6, 0x13, 0x3b, 0x54, 0x28, 0xd2, 0x18, 0x37,
 219        0xcc, 0x46, 0x9f, 0x6a, 0x91, 0x3d, 0x5a, 0x15,
 220        0x3c, 0x89, 0xa3, 0x61, 0x06, 0x7d, 0x2e, 0x78,
 221        0xbe, 0x7d, 0x40, 0xba, 0x2f, 0x95, 0xb1, 0x2f,
 222        0x87, 0x3b, 0x8a, 0xbe, 0x6a, 0xf4, 0xc2, 0x31,
 223        0x74, 0xee, 0x91, 0xe0, 0x23, 0xaa, 0x5d, 0x7f,
 224        0xdd, 0xf0, 0x44, 0x8c, 0x0b, 0x59, 0x2b, 0xfc,
 225        0x48, 0x3a, 0xdf, 0x07, 0x05, 0x38, 0x6c, 0xc9,
 226        0xeb, 0x18, 0x24, 0x68, 0x8d, 0x58, 0x98, 0xd3,
 227        0x31, 0xa3, 0xe4, 0x70, 0x59, 0xb1, 0x21, 0xbe,
 228        0x7e, 0x65, 0x7d, 0xb8, 0x04, 0xab, 0xf6, 0xe4,
 229        0xd7, 0xda, 0xec, 0x09, 0x8f, 0xda, 0x6d, 0x24,
 230        0x07, 0xcc, 0x29, 0x17, 0x05, 0x78, 0x1a, 0xc1,
 231        0xb1, 0xce, 0xfc, 0xaa, 0x2d, 0xe7, 0xcc, 0x85,
 232        0x84, 0x84, 0x03, 0x2a, 0x0c, 0x3f, 0xa9, 0xf8,
 233        0xfd, 0x84, 0x53, 0x59, 0x5c, 0xf0, 0xd4, 0x09,
 234        0xf0, 0xd2, 0x6c, 0x32, 0x03, 0xb0, 0xa0, 0x8c,
 235        0x52, 0xeb, 0x23, 0x91, 0x88, 0x43, 0x13, 0x46,
 236        0xf6, 0x1e, 0xb4, 0x1b, 0xf5, 0x8e, 0x3a, 0xb5,
 237        0x3d, 0x00, 0xf6, 0xe5, 0x08, 0x3d, 0x5f, 0x39,
 238        0xd3, 0x21, 0x69, 0xbc, 0x03, 0x22, 0x3a, 0xd2,
 239        0x5c, 0x84, 0xf8, 0x15, 0xc4, 0x80, 0x0b, 0xbc,
 240        0x29, 0x3c, 0xf3, 0x95, 0x98, 0xcd, 0x8f, 0x35,
 241        0xbc, 0xa5, 0x3e, 0xfc, 0xd4, 0x13, 0x9e, 0xde,
 242        0x4f, 0xce, 0x71, 0x9d, 0x09, 0xad, 0xf2, 0x80,
 243        0x6b, 0x65, 0x7f, 0x03, 0x00, 0x14, 0x7c, 0x15,
 244        0x85, 0x40, 0x6d, 0x70, 0xea, 0xdc, 0xb3, 0x63,
 245        0x35, 0x4f, 0x4d, 0xe0, 0xd9, 0xd5, 0x3c, 0x58,
 246        0x56, 0x23, 0x80, 0xe2, 0x36, 0xdd, 0x75, 0x1d,
 247        0x94, 0x11, 0x41, 0x8e, 0xe0, 0x81, 0x8e, 0xcf,
 248        0xe0, 0xe5, 0xf6, 0xde, 0xd1, 0xe7, 0x04, 0x12,
 249        0x79, 0x92, 0x2b, 0x71, 0x2a, 0x79, 0x8b, 0x7c,
 250        0x44, 0x79, 0x16, 0x30, 0x4e, 0xf4, 0xf6, 0x9b,
 251        0xb7, 0x40, 0xa3, 0x5a, 0xa7, 0x69, 0x3e, 0xc1,
 252        0x3a, 0x04, 0xd0, 0x88, 0xa0, 0x3b, 0xdd, 0xc6,
 253        0x9e, 0x7e, 0x1e, 0x1e, 0x8f, 0x44, 0xf7, 0x73,
 254        0x67, 0x1e, 0x1a, 0x78, 0xfa, 0x62, 0xf4, 0xa9,
 255        0xa8, 0xc6, 0x5b, 0xb8, 0xfa, 0x06, 0x7d, 0x5e,
 256        0x38, 0x1c, 0x9a, 0x39, 0xe9, 0x39, 0x98, 0x22,
 257        0x0b, 0xa7, 0xac, 0x0b, 0xf3, 0xbc, 0xf1, 0xeb,
 258        0x8c, 0x81, 0xe3, 0x48, 0x8a, 0xed, 0x42, 0xc2,
 259        0x38, 0xcf, 0x3e, 0xda, 0xd2, 0x89, 0x8d, 0x9c,
 260        0x53, 0xb5, 0x2f, 0x41, 0x01, 0x26, 0x84, 0x9c,
 261        0xa3, 0x56, 0xf6, 0x49, 0xc7, 0xd4, 0x9f, 0x93,
 262        0x1b, 0x96, 0x49, 0x5e, 0xad, 0xb3, 0x84, 0x1f,
 263        0x3c, 0xa4, 0xe0, 0x9b, 0xd1, 0x90, 0xbc, 0x38,
 264        0x6c, 0xdd, 0x95, 0x4d, 0x9d, 0xb1, 0x71, 0x57,
 265        0x2d, 0x34, 0xe8, 0xb8, 0x42, 0xc7, 0x99, 0x03,
 266        0xc7, 0x07, 0x30, 0x65, 0x91, 0x55, 0xd5, 0x90,
 267        0x70, 0x97, 0x37, 0x68, 0xd4, 0x11, 0xf9, 0xe8,
 268        0xce, 0xec, 0xdc, 0x34, 0xd5, 0xd3, 0xb7, 0xc4,
 269        0xb8, 0x97, 0x05, 0x92, 0xad, 0xf8, 0xe2, 0x36,
 270        0x64, 0x41, 0xc9, 0xc5, 0x41, 0x77, 0x52, 0xd7,
 271        0x2c, 0xa5, 0x24, 0x2f, 0xd9, 0x34, 0x0b, 0x47,
 272        0x35, 0xa7, 0x28, 0x8b, 0xc5, 0xcd, 0xe9, 0x46,
 273        0xac, 0x39, 0x94, 0x3c, 0x10, 0xc6, 0x29, 0x73,
 274        0x0e, 0x0e, 0x5d, 0xe0, 0x71, 0x03, 0x8a, 0x72,
 275        0x0e, 0x26, 0xb0, 0x7d, 0x84, 0xed, 0x95, 0x23,
 276        0x49, 0x5a, 0x45, 0x83, 0x45, 0x60, 0x11, 0x4a,
 277        0x46, 0x31, 0xd4, 0xd8, 0x16, 0x54, 0x98, 0x58,
 278        0xed, 0x6d, 0xcc, 0x5d, 0xd6, 0x50, 0x61, 0x9f,
 279        0x9d, 0xc5, 0x3e, 0x9d, 0x32, 0x47, 0xde, 0x96,
 280        0xe1, 0x5d, 0xd8, 0xf8, 0xb4, 0x69, 0x6f, 0xb9,
 281        0x15, 0x90, 0x57, 0x7a, 0xf6, 0xad, 0xb0, 0x5b,
 282        0xf5, 0xa6, 0x36, 0x94, 0xfd, 0x84, 0xce, 0x1c,
 283        0x0f, 0x4b, 0xd0, 0xc2, 0x5b, 0x6b, 0x56, 0xef,
 284        0x73, 0x93, 0x0b, 0xc3, 0xee, 0xd9, 0xcf, 0xd3,
 285        0xa4, 0x22, 0x58, 0xcd, 0x50, 0x6e, 0x65, 0xf4,
 286        0xe9, 0xb7, 0x71, 0xaf, 0x4b, 0xb3, 0xb6, 0x2f,
 287        0x0f, 0x0e, 0x3b, 0xc9, 0x85, 0x14, 0xf5, 0x17,
 288        0xe8, 0x7a, 0x3a, 0xbf, 0x5f, 0x5e, 0xf8, 0x18,
 289        0x48, 0xa6, 0x72, 0xab, 0x06, 0x95, 0xe9, 0xc8,
 290        0xa7, 0xf4, 0x32, 0x44, 0x04, 0x0c, 0x84, 0x98,
 291        0x73, 0xe3, 0x89, 0x8d, 0x5f, 0x7e, 0x4a, 0x42,
 292        0x8f, 0xc5, 0x28, 0xb1, 0x82, 0xef, 0x1c, 0x97,
 293        0x31, 0x3b, 0x4d, 0xe0, 0x0e, 0x10, 0x10, 0x97,
 294        0x93, 0x49, 0x78, 0x2f, 0x0d, 0x86, 0x8b, 0xa1,
 295        0x53, 0xa9, 0x81, 0x20, 0x79, 0xe7, 0x07, 0x77,
 296        0xb6, 0xac, 0x5e, 0xd2, 0x05, 0xcd, 0xe9, 0xdb,
 297        0x8a, 0x94, 0x82, 0x8a, 0x23, 0xb9, 0x3d, 0x1c,
 298        0xa9, 0x7d, 0x72, 0x4a, 0xed, 0x33, 0xa3, 0xdb,
 299        0x21, 0xa7, 0x86, 0x33, 0x45, 0xa5, 0xaa, 0x56,
 300        0x45, 0xb5, 0x83, 0x29, 0x40, 0x47, 0x79, 0x04,
 301        0x6e, 0xb9, 0x95, 0xd0, 0x81, 0x77, 0x2d, 0x48,
 302        0x1e, 0xfe, 0xc3, 0xc2, 0x1e, 0xe5, 0xf2, 0xbe,
 303        0xfd, 0x3b, 0x94, 0x9f, 0xc4, 0xc4, 0x26, 0x9d,
 304        0xe4, 0x66, 0x1e, 0x19, 0xee, 0x6c, 0x79, 0x97,
 305        0x11, 0x31, 0x4b, 0x0d, 0x01, 0xcb, 0xde, 0xa8,
 306        0xf6, 0x6d, 0x7c, 0x39, 0x46, 0x4e, 0x7e, 0x3f,
 307        0x94, 0x17, 0xdf, 0xa1, 0x7d, 0xd9, 0x1c, 0x8e,
 308        0xbc, 0x7d, 0x33, 0x7d, 0xe3, 0x12, 0x40, 0xca,
 309        0xab, 0x37, 0x11, 0x46, 0xd4, 0xae, 0xef, 0x44,
 310        0xa2, 0xb3, 0x6a, 0x66, 0x0e, 0x0c, 0x90, 0x7f,
 311        0xdf, 0x5c, 0x66, 0x5f, 0xf2, 0x94, 0x9f, 0xa6,
 312        0x73, 0x4f, 0xeb, 0x0d, 0xad, 0xbf, 0xc0, 0x63,
 313        0x5c, 0xdc, 0x46, 0x51, 0xe8, 0x8e, 0x90, 0x19,
 314        0xa8, 0xa4, 0x3c, 0x91, 0x79, 0xfa, 0x7e, 0x58,
 315        0x85, 0x13, 0x55, 0xc5, 0x19, 0x82, 0x37, 0x1b,
 316        0x0a, 0x02, 0x1f, 0x99, 0x6b, 0x18, 0xf1, 0x28,
 317        0x08, 0xa2, 0x73, 0xb8, 0x0f, 0x2e, 0xcd, 0xbf,
 318        0xf3, 0x86, 0x7f, 0xea, 0xef, 0xd0, 0xbb, 0xa6,
 319        0x21, 0xdf, 0x49, 0x73, 0x51, 0xcc, 0x36, 0xd3,
 320        0x3e, 0xa0, 0xf8, 0x44, 0xdf, 0xd3, 0xa6, 0xbe,
 321        0x8a, 0xd4, 0x57, 0xdd, 0x72, 0x94, 0x61, 0x0f,
 322        0x82, 0xd1, 0x07, 0xb8, 0x7c, 0x18, 0x83, 0xdf,
 323        0x3a, 0xe5, 0x50, 0x6a, 0x82, 0x20, 0xac, 0xa9,
 324        0xa8, 0xff, 0xd9, 0xf3, 0x77, 0x33, 0x5a, 0x9e,
 325        0x7f, 0x6d, 0xfe, 0x5d, 0x33, 0x41, 0x42, 0xe7,
 326        0x6c, 0x19, 0xe0, 0x44, 0x8a, 0x15, 0xf6, 0x70,
 327        0x98, 0xb7, 0x68, 0x4d, 0xfa, 0x97, 0x39, 0xb0,
 328        0x8e, 0xe8, 0x84, 0x8b, 0x75, 0x30, 0xb7, 0x7d,
 329        0x92, 0x69, 0x20, 0x9c, 0x81, 0xfb, 0x4b, 0xf4,
 330        0x01, 0x50, 0xeb, 0xce, 0x0c, 0x1c, 0x6c, 0xb5,
 331        0x4a, 0xd7, 0x27, 0x0c, 0xce, 0xbb, 0xe5, 0x85,
 332        0xf0, 0xb6, 0xee, 0xd5, 0x70, 0xdd, 0x3b, 0xfc,
 333        0xd4, 0x99, 0xf1, 0x33, 0xdd, 0x8b, 0xc4, 0x2f,
 334        0xae, 0xab, 0x74, 0x96, 0x32, 0xc7, 0x4c, 0x56,
 335        0x3c, 0x89, 0x0f, 0x96, 0x0b, 0x42, 0xc0, 0xcb,
 336        0xee, 0x0f, 0x0b, 0x8c, 0xfb, 0x7e, 0x47, 0x7b,
 337        0x64, 0x48, 0xfd, 0xb2, 0x00, 0x80, 0x89, 0xa5,
 338        0x13, 0x55, 0x62, 0xfc, 0x8f, 0xe2, 0x42, 0x03,
 339        0xb7, 0x4e, 0x2a, 0x79, 0xb4, 0x82, 0xea, 0x23,
 340        0x49, 0xda, 0xaf, 0x52, 0x63, 0x1e, 0x60, 0x03,
 341        0x89, 0x06, 0x44, 0x46, 0x08, 0xc3, 0xc4, 0x87,
 342        0x70, 0x2e, 0xda, 0x94, 0xad, 0x6b, 0xe0, 0xe4,
 343        0xd1, 0x8a, 0x06, 0xc2, 0xa8, 0xc0, 0xa7, 0x43,
 344        0x3c, 0x47, 0x52, 0x0e, 0xc3, 0x77, 0x81, 0x11,
 345        0x67, 0x0e, 0xa0, 0x70, 0x04, 0x47, 0x29, 0x40,
 346        0x86, 0x0d, 0x34, 0x56, 0xa7, 0xc9, 0x35, 0x59,
 347        0x68, 0xdc, 0x93, 0x81, 0x70, 0xee, 0x86, 0xd9,
 348        0x80, 0x06, 0x40, 0x4f, 0x1a, 0x0d, 0x40, 0x30,
 349        0x0b, 0xcb, 0x96, 0x47, 0xc1, 0xb7, 0x52, 0xfd,
 350        0x56, 0xe0, 0x72, 0x4b, 0xfb, 0xbd, 0x92, 0x45,
 351        0x61, 0x71, 0xc2, 0x33, 0x11, 0xbf, 0x52, 0x83,
 352        0x79, 0x26, 0xe0, 0x49, 0x6b, 0xb7, 0x05, 0x8b,
 353        0xe8, 0x0e, 0x87, 0x31, 0xd7, 0x9d, 0x8a, 0xf5,
 354        0xc0, 0x5f, 0x2e, 0x58, 0x4a, 0xdb, 0x11, 0xb3,
 355        0x6c, 0x30, 0x2a, 0x46, 0x19, 0xe3, 0x27, 0x84,
 356        0x1f, 0x63, 0x6e, 0xf6, 0x57, 0xc7, 0xc9, 0xd8,
 357        0x5e, 0xba, 0xb3, 0x87, 0xd5, 0x83, 0x26, 0x34,
 358        0x21, 0x9e, 0x65, 0xde, 0x42, 0xd3, 0xbe, 0x7b,
 359        0xbc, 0x91, 0x71, 0x44, 0x4d, 0x99, 0x3b, 0x31,
 360        0xe5, 0x3f, 0x11, 0x4e, 0x7f, 0x13, 0x51, 0x3b,
 361        0xae, 0x79, 0xc9, 0xd3, 0x81, 0x8e, 0x25, 0x40,
 362        0x10, 0xfc, 0x07, 0x1e, 0xf9, 0x7b, 0x9a, 0x4b,
 363        0x6c, 0xe3, 0xb3, 0xad, 0x1a, 0x0a, 0xdd, 0x9e,
 364        0x59, 0x0c, 0xa2, 0xcd, 0xae, 0x48, 0x4a, 0x38,
 365        0x5b, 0x47, 0x41, 0x94, 0x65, 0x6b, 0xbb, 0xeb,
 366        0x5b, 0xe3, 0xaf, 0x07, 0x5b, 0xd4, 0x4a, 0xa2,
 367        0xc9, 0x5d, 0x2f, 0x64, 0x03, 0xd7, 0x3a, 0x2c,
 368        0x6e, 0xce, 0x76, 0x95, 0xb4, 0xb3, 0xc0, 0xf1,
 369        0xe2, 0x45, 0x73, 0x7a, 0x5c, 0xab, 0xc1, 0xfc,
 370        0x02, 0x8d, 0x81, 0x29, 0xb3, 0xac, 0x07, 0xec,
 371        0x40, 0x7d, 0x45, 0xd9, 0x7a, 0x59, 0xee, 0x34,
 372        0xf0, 0xe9, 0xd5, 0x7b, 0x96, 0xb1, 0x3d, 0x95,
 373        0xcc, 0x86, 0xb5, 0xb6, 0x04, 0x2d, 0xb5, 0x92,
 374        0x7e, 0x76, 0xf4, 0x06, 0xa9, 0xa3, 0x12, 0x0f,
 375        0xb1, 0xaf, 0x26, 0xba, 0x7c, 0xfc, 0x7e, 0x1c,
 376        0xbc, 0x2c, 0x49, 0x97, 0x53, 0x60, 0x13, 0x0b,
 377        0xa6, 0x61, 0x83, 0x89, 0x42, 0xd4, 0x17, 0x0c,
 378        0x6c, 0x26, 0x52, 0xc3, 0xb3, 0xd4, 0x67, 0xf5,
 379        0xe3, 0x04, 0xb7, 0xf4, 0xcb, 0x80, 0xb8, 0xcb,
 380        0x77, 0x56, 0x3e, 0xaa, 0x57, 0x54, 0xee, 0xb4,
 381        0x2c, 0x67, 0xcf, 0xf2, 0xdc, 0xbe, 0x55, 0xf9,
 382        0x43, 0x1f, 0x6e, 0x22, 0x97, 0x67, 0x7f, 0xc4,
 383        0xef, 0xb1, 0x26, 0x31, 0x1e, 0x27, 0xdf, 0x41,
 384        0x80, 0x47, 0x6c, 0xe2, 0xfa, 0xa9, 0x8c, 0x2a,
 385        0xf6, 0xf2, 0xab, 0xf0, 0x15, 0xda, 0x6c, 0xc8,
 386        0xfe, 0xb5, 0x23, 0xde, 0xa9, 0x05, 0x3f, 0x06,
 387        0x54, 0x4c, 0xcd, 0xe1, 0xab, 0xfc, 0x0e, 0x62,
 388        0x33, 0x31, 0x73, 0x2c, 0x76, 0xcb, 0xb4, 0x47,
 389        0x1e, 0x20, 0xad, 0xd8, 0xf2, 0x31, 0xdd, 0xc4,
 390        0x8b, 0x0c, 0x77, 0xbe, 0xe1, 0x8b, 0x26, 0x00,
 391        0x02, 0x58, 0xd6, 0x8d, 0xef, 0xad, 0x74, 0x67,
 392        0xab, 0x3f, 0xef, 0xcb, 0x6f, 0xb0, 0xcc, 0x81,
 393        0x44, 0x4c, 0xaf, 0xe9, 0x49, 0x4f, 0xdb, 0xa0,
 394        0x25, 0xa4, 0xf0, 0x89, 0xf1, 0xbe, 0xd8, 0x10,
 395        0xff, 0xb1, 0x3b, 0x4b, 0xfa, 0x98, 0xf5, 0x79,
 396        0x6d, 0x1e, 0x69, 0x4d, 0x57, 0xb1, 0xc8, 0x19,
 397        0x1b, 0xbd, 0x1e, 0x8c, 0x84, 0xb7, 0x7b, 0xe8,
 398        0xd2, 0x2d, 0x09, 0x41, 0x41, 0x37, 0x3d, 0xb1,
 399        0x6f, 0x26, 0x5d, 0x71, 0x16, 0x3d, 0xb7, 0x83,
 400        0x27, 0x2c, 0xa7, 0xb6, 0x50, 0xbd, 0x91, 0x86,
 401        0xab, 0x24, 0xa1, 0x38, 0xfd, 0xea, 0x71, 0x55,
 402        0x7e, 0x9a, 0x07, 0x77, 0x4b, 0xfa, 0x61, 0x66,
 403        0x20, 0x1e, 0x28, 0x95, 0x18, 0x1b, 0xa4, 0xa0,
 404        0xfd, 0xc0, 0x89, 0x72, 0x43, 0xd9, 0x3b, 0x49,
 405        0x5a, 0x3f, 0x9d, 0xbf, 0xdb, 0xb4, 0x46, 0xea,
 406        0x42, 0x01, 0x77, 0x23, 0x68, 0x95, 0xb6, 0x24,
 407        0xb3, 0xa8, 0x6c, 0x28, 0x3b, 0x11, 0x40, 0x7e,
 408        0x18, 0x65, 0x6d, 0xd8, 0x24, 0x42, 0x7d, 0x88,
 409        0xc0, 0x52, 0xd9, 0x05, 0xe4, 0x95, 0x90, 0x87,
 410        0x8c, 0xf4, 0xd0, 0x6b, 0xb9, 0x83, 0x99, 0x34,
 411        0x6d, 0xfe, 0x54, 0x40, 0x94, 0x52, 0x21, 0x4f,
 412        0x14, 0x25, 0xc5, 0xd6, 0x5e, 0x95, 0xdc, 0x0a,
 413        0x2b, 0x89, 0x20, 0x11, 0x84, 0x48, 0xd6, 0x3a,
 414        0xcd, 0x5c, 0x24, 0xad, 0x62, 0xe3, 0xb1, 0x93,
 415        0x25, 0x8d, 0xcd, 0x7e, 0xfc, 0x27, 0xa3, 0x37,
 416        0xfd, 0x84, 0xfc, 0x1b, 0xb2, 0xf1, 0x27, 0x38,
 417        0x5a, 0xb7, 0xfc, 0xf2, 0xfa, 0x95, 0x66, 0xd4,
 418        0xfb, 0xba, 0xa7, 0xd7, 0xa3, 0x72, 0x69, 0x48,
 419        0x48, 0x8c, 0xeb, 0x28, 0x89, 0xfe, 0x33, 0x65,
 420        0x5a, 0x36, 0x01, 0x7e, 0x06, 0x79, 0x0a, 0x09,
 421        0x3b, 0x74, 0x11, 0x9a, 0x6e, 0xbf, 0xd4, 0x9e,
 422        0x58, 0x90, 0x49, 0x4f, 0x4d, 0x08, 0xd4, 0xe5,
 423        0x4a, 0x09, 0x21, 0xef, 0x8b, 0xb8, 0x74, 0x3b,
 424        0x91, 0xdd, 0x36, 0x85, 0x60, 0x2d, 0xfa, 0xd4,
 425        0x45, 0x7b, 0x45, 0x53, 0xf5, 0x47, 0x87, 0x7e,
 426        0xa6, 0x37, 0xc8, 0x78, 0x7a, 0x68, 0x9d, 0x8d,
 427        0x65, 0x2c, 0x0e, 0x91, 0x5c, 0xa2, 0x60, 0xf0,
 428        0x8e, 0x3f, 0xe9, 0x1a, 0xcd, 0xaa, 0xe7, 0xd5,
 429        0x77, 0x18, 0xaf, 0xc9, 0xbc, 0x18, 0xea, 0x48,
 430        0x1b, 0xfb, 0x22, 0x48, 0x70, 0x16, 0x29, 0x9e,
 431        0x5b, 0xc1, 0x2c, 0x66, 0x23, 0xbc, 0xf0, 0x1f,
 432        0xef, 0xaf, 0xe4, 0xd6, 0x04, 0x19, 0x82, 0x7a,
 433        0x0b, 0xba, 0x4b, 0x46, 0xb1, 0x6a, 0x85, 0x5d,
 434        0xb4, 0x73, 0xd6, 0x21, 0xa1, 0x71, 0x60, 0x14,
 435        0xee, 0x0a, 0x77, 0xc4, 0x66, 0x2e, 0xf9, 0x69,
 436        0x30, 0xaf, 0x41, 0x0b, 0xc8, 0x83, 0x3c, 0x53,
 437        0x99, 0x19, 0x27, 0x46, 0xf7, 0x41, 0x6e, 0x56,
 438        0xdc, 0x94, 0x28, 0x67, 0x4e, 0xb7, 0x25, 0x48,
 439        0x8a, 0xc2, 0xe0, 0x60, 0x96, 0xcc, 0x18, 0xf4,
 440        0x84, 0xdd, 0xa7, 0x5e, 0x3e, 0x05, 0x0b, 0x26,
 441        0x26, 0xb2, 0x5c, 0x1f, 0x57, 0x1a, 0x04, 0x7e,
 442        0x6a, 0xe3, 0x2f, 0xb4, 0x35, 0xb6, 0x38, 0x40,
 443        0x40, 0xcd, 0x6f, 0x87, 0x2e, 0xef, 0xa3, 0xd7,
 444        0xa9, 0xc2, 0xe8, 0x0d, 0x27, 0xdf, 0x44, 0x62,
 445        0x99, 0xa0, 0xfc, 0xcf, 0x81, 0x78, 0xcb, 0xfe,
 446        0xe5, 0xa0, 0x03, 0x4e, 0x6c, 0xd7, 0xf4, 0xaf,
 447        0x7a, 0xbb, 0x61, 0x82, 0xfe, 0x71, 0x89, 0xb2,
 448        0x22, 0x7c, 0x8e, 0x83, 0x04, 0xce, 0xf6, 0x5d,
 449        0x84, 0x8f, 0x95, 0x6a, 0x7f, 0xad, 0xfd, 0x32,
 450        0x9c, 0x5e, 0xe4, 0x9c, 0x89, 0x60, 0x54, 0xaa,
 451        0x96, 0x72, 0xd2, 0xd7, 0x36, 0x85, 0xa9, 0x45,
 452        0xd2, 0x2a, 0xa1, 0x81, 0x49, 0x6f, 0x7e, 0x04,
 453        0xfa, 0xe2, 0xfe, 0x90, 0x26, 0x77, 0x5a, 0x33,
 454        0xb8, 0x04, 0x9a, 0x7a, 0xe6, 0x4c, 0x4f, 0xad,
 455        0x72, 0x96, 0x08, 0x28, 0x58, 0x13, 0xf8, 0xc4,
 456        0x1c, 0xf0, 0xc3, 0x45, 0x95, 0x49, 0x20, 0x8c,
 457        0x9f, 0x39, 0x70, 0xe1, 0x77, 0xfe, 0xd5, 0x4b,
 458        0xaf, 0x86, 0xda, 0xef, 0x22, 0x06, 0x83, 0x36,
 459        0x29, 0x12, 0x11, 0x40, 0xbc, 0x3b, 0x86, 0xaa,
 460        0xaa, 0x65, 0x60, 0xc3, 0x80, 0xca, 0xed, 0xa9,
 461        0xf3, 0xb0, 0x79, 0x96, 0xa2, 0x55, 0x27, 0x28,
 462        0x55, 0x73, 0x26, 0xa5, 0x50, 0xea, 0x92, 0x4b,
 463        0x3c, 0x5c, 0x82, 0x33, 0xf0, 0x01, 0x3f, 0x03,
 464        0xc1, 0x08, 0x05, 0xbf, 0x98, 0xf4, 0x9b, 0x6d,
 465        0xa5, 0xa8, 0xb4, 0x82, 0x0c, 0x06, 0xfa, 0xff,
 466        0x2d, 0x08, 0xf3, 0x05, 0x4f, 0x57, 0x2a, 0x39,
 467        0xd4, 0x83, 0x0d, 0x75, 0x51, 0xd8, 0x5b, 0x1b,
 468        0xd3, 0x51, 0x5a, 0x32, 0x2a, 0x9b, 0x32, 0xb2,
 469        0xf2, 0xa4, 0x96, 0x12, 0xf2, 0xae, 0x40, 0x34,
 470        0x67, 0xa8, 0xf5, 0x44, 0xd5, 0x35, 0x53, 0xfe,
 471        0xa3, 0x60, 0x96, 0x63, 0x0f, 0x1f, 0x6e, 0xb0,
 472        0x5a, 0x42, 0xa6, 0xfc, 0x51, 0x0b, 0x60, 0x27,
 473        0xbc, 0x06, 0x71, 0xed, 0x65, 0x5b, 0x23, 0x86,
 474        0x4a, 0x07, 0x3b, 0x22, 0x07, 0x46, 0xe6, 0x90,
 475        0x3e, 0xf3, 0x25, 0x50, 0x1b, 0x4c, 0x7f, 0x03,
 476        0x08, 0xa8, 0x36, 0x6b, 0x87, 0xe5, 0xe3, 0xdb,
 477        0x9a, 0x38, 0x83, 0xff, 0x9f, 0x1a, 0x9f, 0x57,
 478        0xa4, 0x2a, 0xf6, 0x37, 0xbc, 0x1a, 0xff, 0xc9,
 479        0x1e, 0x35, 0x0c, 0xc3, 0x7c, 0xa3, 0xb2, 0xe5,
 480        0xd2, 0xc6, 0xb4, 0x57, 0x47, 0xe4, 0x32, 0x16,
 481        0x6d, 0xa9, 0xae, 0x64, 0xe6, 0x2d, 0x8d, 0xc5,
 482        0x8d, 0x50, 0x8e, 0xe8, 0x1a, 0x22, 0x34, 0x2a,
 483        0xd9, 0xeb, 0x51, 0x90, 0x4a, 0xb1, 0x41, 0x7d,
 484        0x64, 0xf9, 0xb9, 0x0d, 0xf6, 0x23, 0x33, 0xb0,
 485        0x33, 0xf4, 0xf7, 0x3f, 0x27, 0x84, 0xc6, 0x0f,
 486        0x54, 0xa5, 0xc0, 0x2e, 0xec, 0x0b, 0x3a, 0x48,
 487        0x6e, 0x80, 0x35, 0x81, 0x43, 0x9b, 0x90, 0xb1,
 488        0xd0, 0x2b, 0xea, 0x21, 0xdc, 0xda, 0x5b, 0x09,
 489        0xf4, 0xcc, 0x10, 0xb4, 0xc7, 0xfe, 0x79, 0x51,
 490        0xc3, 0xc5, 0xac, 0x88, 0x74, 0x84, 0x0b, 0x4b,
 491        0xca, 0x79, 0x16, 0x29, 0xfb, 0x69, 0x54, 0xdf,
 492        0x41, 0x7e, 0xe9, 0xc7, 0x8e, 0xea, 0xa5, 0xfe,
 493        0xfc, 0x76, 0x0e, 0x90, 0xc4, 0x92, 0x38, 0xad,
 494        0x7b, 0x48, 0xe6, 0x6e, 0xf7, 0x21, 0xfd, 0x4e,
 495        0x93, 0x0a, 0x7b, 0x41, 0x83, 0x68, 0xfb, 0x57,
 496        0x51, 0x76, 0x34, 0xa9, 0x6c, 0x00, 0xaa, 0x4f,
 497        0x66, 0x65, 0x98, 0x4a, 0x4f, 0xa3, 0xa0, 0xef,
 498        0x69, 0x3f, 0xe3, 0x1c, 0x92, 0x8c, 0xfd, 0xd8,
 499        0xe8, 0xde, 0x7c, 0x7f, 0x3e, 0x84, 0x8e, 0x69,
 500        0x3c, 0xf1, 0xf2, 0x05, 0x46, 0xdc, 0x2f, 0x9d,
 501        0x5e, 0x6e, 0x4c, 0xfb, 0xb5, 0x99, 0x2a, 0x59,
 502        0x63, 0xc1, 0x34, 0xbc, 0x57, 0xc0, 0x0d, 0xb9,
 503        0x61, 0x25, 0xf3, 0x33, 0x23, 0x51, 0xb6, 0x0d,
 504        0x07, 0xa6, 0xab, 0x94, 0x4a, 0xb7, 0x2a, 0xea,
 505        0xee, 0xac, 0xa3, 0xc3, 0x04, 0x8b, 0x0e, 0x56,
 506        0xfe, 0x44, 0xa7, 0x39, 0xe2, 0xed, 0xed, 0xb4,
 507        0x22, 0x2b, 0xac, 0x12, 0x32, 0x28, 0x91, 0xd8,
 508        0xa5, 0xab, 0xff, 0x5f, 0xe0, 0x4b, 0xda, 0x78,
 509        0x17, 0xda, 0xf1, 0x01, 0x5b, 0xcd, 0xe2, 0x5f,
 510        0x50, 0x45, 0x73, 0x2b, 0xe4, 0x76, 0x77, 0xf4,
 511        0x64, 0x1d, 0x43, 0xfb, 0x84, 0x7a, 0xea, 0x91,
 512        0xae, 0xf9, 0x9e, 0xb7, 0xb4, 0xb0, 0x91, 0x5f,
 513        0x16, 0x35, 0x9a, 0x11, 0xb8, 0xc7, 0xc1, 0x8c,
 514        0xc6, 0x10, 0x8d, 0x2f, 0x63, 0x4a, 0xa7, 0x57,
 515        0x3a, 0x51, 0xd6, 0x32, 0x2d, 0x64, 0x72, 0xd4,
 516        0x66, 0xdc, 0x10, 0xa6, 0x67, 0xd6, 0x04, 0x23,
 517        0x9d, 0x0a, 0x11, 0x77, 0xdd, 0x37, 0x94, 0x17,
 518        0x3c, 0xbf, 0x8b, 0x65, 0xb0, 0x2e, 0x5e, 0x66,
 519        0x47, 0x64, 0xac, 0xdd, 0xf0, 0x84, 0xfd, 0x39,
 520        0xfa, 0x15, 0x5d, 0xef, 0xae, 0xca, 0xc1, 0x36,
 521        0xa7, 0x5c, 0xbf, 0xc7, 0x08, 0xc2, 0x66, 0x00,
 522        0x74, 0x74, 0x4e, 0x27, 0x3f, 0x55, 0x8a, 0xb7,
 523        0x38, 0x66, 0x83, 0x6d, 0xcf, 0x99, 0x9e, 0x60,
 524        0x8f, 0xdd, 0x2e, 0x62, 0x22, 0x0e, 0xef, 0x0c,
 525        0x98, 0xa7, 0x85, 0x74, 0x3b, 0x9d, 0xec, 0x9e,
 526        0xa9, 0x19, 0x72, 0xa5, 0x7f, 0x2c, 0x39, 0xb7,
 527        0x7d, 0xb7, 0xf1, 0x12, 0x65, 0x27, 0x4b, 0x5a,
 528        0xde, 0x17, 0xfe, 0xad, 0x44, 0xf3, 0x20, 0x4d,
 529        0xfd, 0xe4, 0x1f, 0xb5, 0x81, 0xb0, 0x36, 0x37,
 530        0x08, 0x6f, 0xc3, 0x0c, 0xe9, 0x85, 0x98, 0x82,
 531        0xa9, 0x62, 0x0c, 0xc4, 0x97, 0xc0, 0x50, 0xc8,
 532        0xa7, 0x3c, 0x50, 0x9f, 0x43, 0xb9, 0xcd, 0x5e,
 533        0x4d, 0xfa, 0x1c, 0x4b, 0x0b, 0xa9, 0x98, 0x85,
 534        0x38, 0x92, 0xac, 0x8d, 0xe4, 0xad, 0x9b, 0x98,
 535        0xab, 0xd9, 0x38, 0xac, 0x62, 0x52, 0xa3, 0x22,
 536        0x63, 0x0f, 0xbf, 0x95, 0x48, 0xdf, 0x69, 0xe7,
 537        0x8b, 0x33, 0xd5, 0xb2, 0xbd, 0x05, 0x49, 0x49,
 538        0x9d, 0x57, 0x73, 0x19, 0x33, 0xae, 0xfa, 0x33,
 539        0xf1, 0x19, 0xa8, 0x80, 0xce, 0x04, 0x9f, 0xbc,
 540        0x1d, 0x65, 0x82, 0x1b, 0xe5, 0x3a, 0x51, 0xc8,
 541        0x1c, 0x21, 0xe3, 0x5d, 0xf3, 0x7d, 0x9b, 0x2f,
 542        0x2c, 0x1d, 0x4a, 0x7f, 0x9b, 0x68, 0x35, 0xa3,
 543        0xb2, 0x50, 0xf7, 0x62, 0x79, 0xcd, 0xf4, 0x98,
 544        0x4f, 0xe5, 0x63, 0x7c, 0x3e, 0x45, 0x31, 0x8c,
 545        0x16, 0xa0, 0x12, 0xc8, 0x58, 0xce, 0x39, 0xa6,
 546        0xbc, 0x54, 0xdb, 0xc5, 0xe0, 0xd5, 0xba, 0xbc,
 547        0xb9, 0x04, 0xf4, 0x8d, 0xe8, 0x2f, 0x15, 0x9d,
 548};
 549
 550/* 100 test cases */
 551static struct crc_test {
 552        u32 crc;        /* random starting crc */
 553        u32 start;      /* random 6 bit offset in buf */
 554        u32 length;     /* random 11 bit length of test */
 555        u32 crc_le;     /* expected crc32_le result */
 556        u32 crc_be;     /* expected crc32_be result */
 557        u32 crc32c_le;  /* expected crc32c_le result */
 558} const test[] __initconst =
 559{
 560        {0x674bf11d, 0x00000038, 0x00000542, 0x0af6d466, 0xd8b6e4c1, 0xf6e93d6c},
 561        {0x35c672c6, 0x0000003a, 0x000001aa, 0xc6d3dfba, 0x28aaf3ad, 0x0fe92aca},
 562        {0x496da28e, 0x00000039, 0x000005af, 0xd933660f, 0x5d57e81f, 0x52e1ebb8},
 563        {0x09a9b90e, 0x00000027, 0x000001f8, 0xb45fe007, 0xf45fca9a, 0x0798af9a},
 564        {0xdc97e5a9, 0x00000025, 0x000003b6, 0xf81a3562, 0xe0126ba2, 0x18eb3152},
 565        {0x47c58900, 0x0000000a, 0x000000b9, 0x8e58eccf, 0xf3afc793, 0xd00d08c7},
 566        {0x292561e8, 0x0000000c, 0x00000403, 0xa2ba8aaf, 0x0b797aed, 0x8ba966bc},
 567        {0x415037f6, 0x00000003, 0x00000676, 0xa17d52e8, 0x7f0fdf35, 0x11d694a2},
 568        {0x3466e707, 0x00000026, 0x00000042, 0x258319be, 0x75c484a2, 0x6ab3208d},
 569        {0xafd1281b, 0x00000023, 0x000002ee, 0x4428eaf8, 0x06c7ad10, 0xba4603c5},
 570        {0xd3857b18, 0x00000028, 0x000004a2, 0x5c430821, 0xb062b7cb, 0xe6071c6f},
 571        {0x1d825a8f, 0x0000002b, 0x0000050b, 0xd2c45f0c, 0xd68634e0, 0x179ec30a},
 572        {0x5033e3bc, 0x0000000b, 0x00000078, 0xa3ea4113, 0xac6d31fb, 0x0903beb8},
 573        {0x94f1fb5e, 0x0000000f, 0x000003a2, 0xfbfc50b1, 0x3cfe50ed, 0x6a7cb4fa},
 574        {0xc9a0fe14, 0x00000009, 0x00000473, 0x5fb61894, 0x87070591, 0xdb535801},
 575        {0x88a034b1, 0x0000001c, 0x000005ad, 0xc1b16053, 0x46f95c67, 0x92bed597},
 576        {0xf0f72239, 0x00000020, 0x0000026d, 0xa6fa58f3, 0xf8c2c1dd, 0x192a3f1b},
 577        {0xcc20a5e3, 0x0000003b, 0x0000067a, 0x7740185a, 0x308b979a, 0xccbaec1a},
 578        {0xce589c95, 0x0000002b, 0x00000641, 0xd055e987, 0x40aae25b, 0x7eabae4d},
 579        {0x78edc885, 0x00000035, 0x000005be, 0xa39cb14b, 0x035b0d1f, 0x28c72982},
 580        {0x9d40a377, 0x0000003b, 0x00000038, 0x1f47ccd2, 0x197fbc9d, 0xc3cd4d18},
 581        {0x703d0e01, 0x0000003c, 0x000006f1, 0x88735e7c, 0xfed57c5a, 0xbca8f0e7},
 582        {0x776bf505, 0x0000000f, 0x000005b2, 0x5cc4fc01, 0xf32efb97, 0x713f60b3},
 583        {0x4a3e7854, 0x00000027, 0x000004b8, 0x8d923c82, 0x0cbfb4a2, 0xebd08fd5},
 584        {0x209172dd, 0x0000003b, 0x00000356, 0xb89e9c2b, 0xd7868138, 0x64406c59},
 585        {0x3ba4cc5b, 0x0000002f, 0x00000203, 0xe51601a9, 0x5b2a1032, 0x7421890e},
 586        {0xfc62f297, 0x00000000, 0x00000079, 0x71a8e1a2, 0x5d88685f, 0xe9347603},
 587        {0x64280b8b, 0x00000016, 0x000007ab, 0x0fa7a30c, 0xda3a455f, 0x1bef9060},
 588        {0x97dd724b, 0x00000033, 0x000007ad, 0x5788b2f4, 0xd7326d32, 0x34720072},
 589        {0x61394b52, 0x00000035, 0x00000571, 0xc66525f1, 0xcabe7fef, 0x48310f59},
 590        {0x29b4faff, 0x00000024, 0x0000006e, 0xca13751e, 0x993648e0, 0x783a4213},
 591        {0x29bfb1dc, 0x0000000b, 0x00000244, 0x436c43f7, 0x429f7a59, 0x9e8efd41},
 592        {0x86ae934b, 0x00000035, 0x00000104, 0x0760ec93, 0x9cf7d0f4, 0xfc3d34a5},
 593        {0xc4c1024e, 0x0000002e, 0x000006b1, 0x6516a3ec, 0x19321f9c, 0x17a52ae2},
 594        {0x3287a80a, 0x00000026, 0x00000496, 0x0b257eb1, 0x754ebd51, 0x886d935a},
 595        {0xa4db423e, 0x00000023, 0x0000045d, 0x9b3a66dc, 0x873e9f11, 0xeaaeaeb2},
 596        {0x7a1078df, 0x00000015, 0x0000014a, 0x8c2484c5, 0x6a628659, 0x8e900a4b},
 597        {0x6048bd5b, 0x00000006, 0x0000006a, 0x897e3559, 0xac9961af, 0xd74662b1},
 598        {0xd8f9ea20, 0x0000003d, 0x00000277, 0x60eb905b, 0xed2aaf99, 0xd26752ba},
 599        {0xea5ec3b4, 0x0000002a, 0x000004fe, 0x869965dc, 0x6c1f833b, 0x8b1fcd62},
 600        {0x2dfb005d, 0x00000016, 0x00000345, 0x6a3b117e, 0xf05e8521, 0xf54342fe},
 601        {0x5a214ade, 0x00000020, 0x000005b6, 0x467f70be, 0xcb22ccd3, 0x5b95b988},
 602        {0xf0ab9cca, 0x00000032, 0x00000515, 0xed223df3, 0x7f3ef01d, 0x2e1176be},
 603        {0x91b444f9, 0x0000002e, 0x000007f8, 0x84e9a983, 0x5676756f, 0x66120546},
 604        {0x1b5d2ddb, 0x0000002e, 0x0000012c, 0xba638c4c, 0x3f42047b, 0xf256a5cc},
 605        {0xd824d1bb, 0x0000003a, 0x000007b5, 0x6288653b, 0x3a3ebea0, 0x4af1dd69},
 606        {0x0470180c, 0x00000034, 0x000001f0, 0x9d5b80d6, 0x3de08195, 0x56f0a04a},
 607        {0xffaa3a3f, 0x00000036, 0x00000299, 0xf3a82ab8, 0x53e0c13d, 0x74f6b6b2},
 608        {0x6406cfeb, 0x00000023, 0x00000600, 0xa920b8e8, 0xe4e2acf4, 0x085951fd},
 609        {0xb24aaa38, 0x0000003e, 0x000004a1, 0x657cc328, 0x5077b2c3, 0xc65387eb},
 610        {0x58b2ab7c, 0x00000039, 0x000002b4, 0x3a17ee7e, 0x9dcb3643, 0x1ca9257b},
 611        {0x3db85970, 0x00000006, 0x000002b6, 0x95268b59, 0xb9812c10, 0xfd196d76},
 612        {0x857830c5, 0x00000003, 0x00000590, 0x4ef439d5, 0xf042161d, 0x5ef88339},
 613        {0xe1fcd978, 0x0000003e, 0x000007d8, 0xae8d8699, 0xce0a1ef5, 0x2c3714d9},
 614        {0xb982a768, 0x00000016, 0x000006e0, 0x62fad3df, 0x5f8a067b, 0x58576548},
 615        {0x1d581ce8, 0x0000001e, 0x0000058b, 0xf0f5da53, 0x26e39eee, 0xfd7c57de},
 616        {0x2456719b, 0x00000025, 0x00000503, 0x4296ac64, 0xd50e4c14, 0xd5fedd59},
 617        {0xfae6d8f2, 0x00000000, 0x0000055d, 0x057fdf2e, 0x2a31391a, 0x1cc3b17b},
 618        {0xcba828e3, 0x00000039, 0x000002ce, 0xe3f22351, 0x8f00877b, 0x270eed73},
 619        {0x13d25952, 0x0000000a, 0x0000072d, 0x76d4b4cc, 0x5eb67ec3, 0x91ecbb11},
 620        {0x0342be3f, 0x00000015, 0x00000599, 0xec75d9f1, 0x9d4d2826, 0x05ed8d0c},
 621        {0xeaa344e0, 0x00000014, 0x000004d8, 0x72a4c981, 0x2064ea06, 0x0b09ad5b},
 622        {0xbbb52021, 0x0000003b, 0x00000272, 0x04af99fc, 0xaf042d35, 0xf8d511fb},
 623        {0xb66384dc, 0x0000001d, 0x000007fc, 0xd7629116, 0x782bd801, 0x5ad832cc},
 624        {0x616c01b6, 0x00000022, 0x000002c8, 0x5b1dab30, 0x783ce7d2, 0x1214d196},
 625        {0xce2bdaad, 0x00000016, 0x0000062a, 0x932535c8, 0x3f02926d, 0x5747218a},
 626        {0x00fe84d7, 0x00000005, 0x00000205, 0x850e50aa, 0x753d649c, 0xde8f14de},
 627        {0xbebdcb4c, 0x00000006, 0x0000055d, 0xbeaa37a2, 0x2d8c9eba, 0x3563b7b9},
 628        {0xd8b1a02a, 0x00000010, 0x00000387, 0x5017d2fc, 0x503541a5, 0x071475d0},
 629        {0x3b96cad2, 0x00000036, 0x00000347, 0x1d2372ae, 0x926cd90b, 0x54c79d60},
 630        {0xc94c1ed7, 0x00000005, 0x0000038b, 0x9e9fdb22, 0x144a9178, 0x4c53eee6},
 631        {0x1aad454e, 0x00000025, 0x000002b2, 0xc3f6315c, 0x5c7a35b3, 0x10137a3c},
 632        {0xa4fec9a6, 0x00000000, 0x000006d6, 0x90be5080, 0xa4107605, 0xaa9d6c73},
 633        {0x1bbe71e2, 0x0000001f, 0x000002fd, 0x4e504c3b, 0x284ccaf1, 0xb63d23e7},
 634        {0x4201c7e4, 0x00000002, 0x000002b7, 0x7822e3f9, 0x0cc912a9, 0x7f53e9cf},
 635        {0x23fddc96, 0x00000003, 0x00000627, 0x8a385125, 0x07767e78, 0x13c1cd83},
 636        {0xd82ba25c, 0x00000016, 0x0000063e, 0x98e4148a, 0x283330c9, 0x49ff5867},
 637        {0x786f2032, 0x0000002d, 0x0000060f, 0xf201600a, 0xf561bfcd, 0x8467f211},
 638        {0xfebe4e1f, 0x0000002a, 0x000004f2, 0x95e51961, 0xfd80dcab, 0x3f9683b2},
 639        {0x1a6e0a39, 0x00000008, 0x00000672, 0x8af6c2a5, 0x78dd84cb, 0x76a3f874},
 640        {0x56000ab8, 0x0000000e, 0x000000e5, 0x36bacb8f, 0x22ee1f77, 0x863b702f},
 641        {0x4717fe0c, 0x00000000, 0x000006ec, 0x8439f342, 0x5c8e03da, 0xdc6c58ff},
 642        {0xd5d5d68e, 0x0000003c, 0x000003a3, 0x46fff083, 0x177d1b39, 0x0622cc95},
 643        {0xc25dd6c6, 0x00000024, 0x000006c0, 0x5ceb8eb4, 0x892b0d16, 0xe85605cd},
 644        {0xe9b11300, 0x00000023, 0x00000683, 0x07a5d59a, 0x6c6a3208, 0x31da5f06},
 645        {0x95cd285e, 0x00000001, 0x00000047, 0x7b3a4368, 0x0202c07e, 0xa1f2e784},
 646        {0xd9245a25, 0x0000001e, 0x000003a6, 0xd33c1841, 0x1936c0d5, 0xb07cc616},
 647        {0x103279db, 0x00000006, 0x0000039b, 0xca09b8a0, 0x77d62892, 0xbf943b6c},
 648        {0x1cba3172, 0x00000027, 0x000001c8, 0xcb377194, 0xebe682db, 0x2c01af1c},
 649        {0x8f613739, 0x0000000c, 0x000001df, 0xb4b0bc87, 0x7710bd43, 0x0fe5f56d},
 650        {0x1c6aa90d, 0x0000001b, 0x0000053c, 0x70559245, 0xda7894ac, 0xf8943b2d},
 651        {0xaabe5b93, 0x0000003d, 0x00000715, 0xcdbf42fa, 0x0c3b99e7, 0xe4d89272},
 652        {0xf15dd038, 0x00000006, 0x000006db, 0x6e104aea, 0x8d5967f2, 0x7c2f6bbb},
 653        {0x584dd49c, 0x00000020, 0x000007bc, 0x36b6cfd6, 0xad4e23b2, 0xabbf388b},
 654        {0x5d8c9506, 0x00000020, 0x00000470, 0x4c62378e, 0x31d92640, 0x1dca1f4e},
 655        {0xb80d17b0, 0x00000032, 0x00000346, 0x22a5bb88, 0x9a7ec89f, 0x5c170e23},
 656        {0xdaf0592e, 0x00000023, 0x000007b0, 0x3cab3f99, 0x9b1fdd99, 0xc0e9d672},
 657        {0x4793cc85, 0x0000000d, 0x00000706, 0xe82e04f6, 0xed3db6b7, 0xc18bdc86},
 658        {0x82ebf64e, 0x00000009, 0x000007c3, 0x69d590a9, 0x9efa8499, 0xa874fcdd},
 659        {0xb18a0319, 0x00000026, 0x000007db, 0x1cf98dcc, 0x8fa9ad6a, 0x9dc0bb48},
 660};
 661
 662#include <linux/time.h>
 663
 664static int __init crc32c_test(void)
 665{
 666        int i;
 667        int errors = 0;
 668        int bytes = 0;
 669        u64 nsec;
 670        unsigned long flags;
 671
 672        /* keep static to prevent cache warming code from
 673         * getting eliminated by the compiler */
 674        static u32 crc;
 675
 676        /* pre-warm the cache */
 677        for (i = 0; i < 100; i++) {
 678                bytes += 2*test[i].length;
 679
 680                crc ^= __crc32c_le(test[i].crc, test_buf +
 681                    test[i].start, test[i].length);
 682        }
 683
 684        /* reduce OS noise */
 685        local_irq_save(flags);
 686        local_irq_disable();
 687
 688        nsec = ktime_get_ns();
 689        for (i = 0; i < 100; i++) {
 690                if (test[i].crc32c_le != __crc32c_le(test[i].crc, test_buf +
 691                    test[i].start, test[i].length))
 692                        errors++;
 693        }
 694        nsec = ktime_get_ns() - nsec;
 695
 696        local_irq_restore(flags);
 697        local_irq_enable();
 698
 699        pr_info("crc32c: CRC_LE_BITS = %d\n", CRC_LE_BITS);
 700
 701        if (errors)
 702                pr_warn("crc32c: %d self tests failed\n", errors);
 703        else {
 704                pr_info("crc32c: self tests passed, processed %d bytes in %lld nsec\n",
 705                        bytes, nsec);
 706        }
 707
 708        return 0;
 709}
 710
 711static int __init crc32c_combine_test(void)
 712{
 713        int i, j;
 714        int errors = 0, runs = 0;
 715
 716        for (i = 0; i < 10; i++) {
 717                u32 crc_full;
 718
 719                crc_full = __crc32c_le(test[i].crc, test_buf + test[i].start,
 720                                       test[i].length);
 721                for (j = 0; j <= test[i].length; ++j) {
 722                        u32 crc1, crc2;
 723                        u32 len1 = j, len2 = test[i].length - j;
 724
 725                        crc1 = __crc32c_le(test[i].crc, test_buf +
 726                                           test[i].start, len1);
 727                        crc2 = __crc32c_le(0, test_buf + test[i].start +
 728                                           len1, len2);
 729
 730                        if (!(crc_full == __crc32c_le_combine(crc1, crc2, len2) &&
 731                              crc_full == test[i].crc32c_le))
 732                                errors++;
 733                        runs++;
 734                        cond_resched();
 735                }
 736        }
 737
 738        if (errors)
 739                pr_warn("crc32c_combine: %d/%d self tests failed\n", errors, runs);
 740        else
 741                pr_info("crc32c_combine: %d self tests passed\n", runs);
 742
 743        return 0;
 744}
 745
 746static int __init crc32_test(void)
 747{
 748        int i;
 749        int errors = 0;
 750        int bytes = 0;
 751        u64 nsec;
 752        unsigned long flags;
 753
 754        /* keep static to prevent cache warming code from
 755         * getting eliminated by the compiler */
 756        static u32 crc;
 757
 758        /* pre-warm the cache */
 759        for (i = 0; i < 100; i++) {
 760                bytes += 2*test[i].length;
 761
 762                crc ^= crc32_le(test[i].crc, test_buf +
 763                    test[i].start, test[i].length);
 764
 765                crc ^= crc32_be(test[i].crc, test_buf +
 766                    test[i].start, test[i].length);
 767        }
 768
 769        /* reduce OS noise */
 770        local_irq_save(flags);
 771        local_irq_disable();
 772
 773        nsec = ktime_get_ns();
 774        for (i = 0; i < 100; i++) {
 775                if (test[i].crc_le != crc32_le(test[i].crc, test_buf +
 776                    test[i].start, test[i].length))
 777                        errors++;
 778
 779                if (test[i].crc_be != crc32_be(test[i].crc, test_buf +
 780                    test[i].start, test[i].length))
 781                        errors++;
 782        }
 783        nsec = ktime_get_ns() - nsec;
 784
 785        local_irq_restore(flags);
 786        local_irq_enable();
 787
 788        pr_info("crc32: CRC_LE_BITS = %d, CRC_BE BITS = %d\n",
 789                 CRC_LE_BITS, CRC_BE_BITS);
 790
 791        if (errors)
 792                pr_warn("crc32: %d self tests failed\n", errors);
 793        else {
 794                pr_info("crc32: self tests passed, processed %d bytes in %lld nsec\n",
 795                        bytes, nsec);
 796        }
 797
 798        return 0;
 799}
 800
 801static int __init crc32_combine_test(void)
 802{
 803        int i, j;
 804        int errors = 0, runs = 0;
 805
 806        for (i = 0; i < 10; i++) {
 807                u32 crc_full;
 808
 809                crc_full = crc32_le(test[i].crc, test_buf + test[i].start,
 810                                    test[i].length);
 811                for (j = 0; j <= test[i].length; ++j) {
 812                        u32 crc1, crc2;
 813                        u32 len1 = j, len2 = test[i].length - j;
 814
 815                        crc1 = crc32_le(test[i].crc, test_buf +
 816                                        test[i].start, len1);
 817                        crc2 = crc32_le(0, test_buf + test[i].start +
 818                                        len1, len2);
 819
 820                        if (!(crc_full == crc32_le_combine(crc1, crc2, len2) &&
 821                              crc_full == test[i].crc_le))
 822                                errors++;
 823                        runs++;
 824                        cond_resched();
 825                }
 826        }
 827
 828        if (errors)
 829                pr_warn("crc32_combine: %d/%d self tests failed\n", errors, runs);
 830        else
 831                pr_info("crc32_combine: %d self tests passed\n", runs);
 832
 833        return 0;
 834}
 835
 836static int __init crc32test_init(void)
 837{
 838        crc32_test();
 839        crc32c_test();
 840
 841        crc32_combine_test();
 842        crc32c_combine_test();
 843
 844        return 0;
 845}
 846
 847static void __exit crc32_exit(void)
 848{
 849}
 850
 851module_init(crc32test_init);
 852module_exit(crc32_exit);
 853
 854MODULE_AUTHOR("Matt Domsch <Matt_Domsch@dell.com>");
 855MODULE_DESCRIPTION("CRC32 selftest");
 856MODULE_LICENSE("GPL");
 857