Merge pull request #149 from gm4tr1x/md5crypt_warnings
[hashcat.git] / OpenCL / m06100_a3.cl
1 /**
2  * Author......: Jens Steube <jens.steube@gmail.com>
3  * License.....: MIT
4  */
5
6 #define _WHIRLPOOL_
7
8 #define NEW_SIMD_CODE
9
10 #include "include/constants.h"
11 #include "include/kernel_vendor.h"
12
13 #define DGST_R0 0
14 #define DGST_R1 1
15 #define DGST_R2 2
16 #define DGST_R3 3
17
18 #include "include/kernel_functions.c"
19 #include "OpenCL/types_ocl.c"
20 #include "OpenCL/common.c"
21 #include "OpenCL/simd.c"
22
23 #define R 10
24
25 #if   VECT_SIZE == 1
26 #define BOX(S,n,i) (S)[(n)][(i)]
27 #elif VECT_SIZE == 2
28 #define BOX(S,n,i) (u32x) ((S)[(n)][(i).s0], (S)[(n)][(i).s1])
29 #elif VECT_SIZE == 4
30 #define BOX(S,n,i) (u32x) ((S)[(n)][(i).s0], (S)[(n)][(i).s1], (S)[(n)][(i).s2], (S)[(n)][(i).s3])
31 #elif VECT_SIZE == 8
32 #define BOX(S,n,i) (u32x) ((S)[(n)][(i).s0], (S)[(n)][(i).s1], (S)[(n)][(i).s2], (S)[(n)][(i).s3], (S)[(n)][(i).s4], (S)[(n)][(i).s5], (S)[(n)][(i).s6], (S)[(n)][(i).s7])
33 #endif
34
35 __constant u32 Ch[8][256] =
36 {
37   {
38     0x18186018, 0x23238c23, 0xc6c63fc6, 0xe8e887e8,
39     0x87872687, 0xb8b8dab8, 0x01010401, 0x4f4f214f,
40     0x3636d836, 0xa6a6a2a6, 0xd2d26fd2, 0xf5f5f3f5,
41     0x7979f979, 0x6f6fa16f, 0x91917e91, 0x52525552,
42     0x60609d60, 0xbcbccabc, 0x9b9b569b, 0x8e8e028e,
43     0xa3a3b6a3, 0x0c0c300c, 0x7b7bf17b, 0x3535d435,
44     0x1d1d741d, 0xe0e0a7e0, 0xd7d77bd7, 0xc2c22fc2,
45     0x2e2eb82e, 0x4b4b314b, 0xfefedffe, 0x57574157,
46     0x15155415, 0x7777c177, 0x3737dc37, 0xe5e5b3e5,
47     0x9f9f469f, 0xf0f0e7f0, 0x4a4a354a, 0xdada4fda,
48     0x58587d58, 0xc9c903c9, 0x2929a429, 0x0a0a280a,
49     0xb1b1feb1, 0xa0a0baa0, 0x6b6bb16b, 0x85852e85,
50     0xbdbdcebd, 0x5d5d695d, 0x10104010, 0xf4f4f7f4,
51     0xcbcb0bcb, 0x3e3ef83e, 0x05051405, 0x67678167,
52     0xe4e4b7e4, 0x27279c27, 0x41411941, 0x8b8b168b,
53     0xa7a7a6a7, 0x7d7de97d, 0x95956e95, 0xd8d847d8,
54     0xfbfbcbfb, 0xeeee9fee, 0x7c7ced7c, 0x66668566,
55     0xdddd53dd, 0x17175c17, 0x47470147, 0x9e9e429e,
56     0xcaca0fca, 0x2d2db42d, 0xbfbfc6bf, 0x07071c07,
57     0xadad8ead, 0x5a5a755a, 0x83833683, 0x3333cc33,
58     0x63639163, 0x02020802, 0xaaaa92aa, 0x7171d971,
59     0xc8c807c8, 0x19196419, 0x49493949, 0xd9d943d9,
60     0xf2f2eff2, 0xe3e3abe3, 0x5b5b715b, 0x88881a88,
61     0x9a9a529a, 0x26269826, 0x3232c832, 0xb0b0fab0,
62     0xe9e983e9, 0x0f0f3c0f, 0xd5d573d5, 0x80803a80,
63     0xbebec2be, 0xcdcd13cd, 0x3434d034, 0x48483d48,
64     0xffffdbff, 0x7a7af57a, 0x90907a90, 0x5f5f615f,
65     0x20208020, 0x6868bd68, 0x1a1a681a, 0xaeae82ae,
66     0xb4b4eab4, 0x54544d54, 0x93937693, 0x22228822,
67     0x64648d64, 0xf1f1e3f1, 0x7373d173, 0x12124812,
68     0x40401d40, 0x08082008, 0xc3c32bc3, 0xecec97ec,
69     0xdbdb4bdb, 0xa1a1bea1, 0x8d8d0e8d, 0x3d3df43d,
70     0x97976697, 0x00000000, 0xcfcf1bcf, 0x2b2bac2b,
71     0x7676c576, 0x82823282, 0xd6d67fd6, 0x1b1b6c1b,
72     0xb5b5eeb5, 0xafaf86af, 0x6a6ab56a, 0x50505d50,
73     0x45450945, 0xf3f3ebf3, 0x3030c030, 0xefef9bef,
74     0x3f3ffc3f, 0x55554955, 0xa2a2b2a2, 0xeaea8fea,
75     0x65658965, 0xbabad2ba, 0x2f2fbc2f, 0xc0c027c0,
76     0xdede5fde, 0x1c1c701c, 0xfdfdd3fd, 0x4d4d294d,
77     0x92927292, 0x7575c975, 0x06061806, 0x8a8a128a,
78     0xb2b2f2b2, 0xe6e6bfe6, 0x0e0e380e, 0x1f1f7c1f,
79     0x62629562, 0xd4d477d4, 0xa8a89aa8, 0x96966296,
80     0xf9f9c3f9, 0xc5c533c5, 0x25259425, 0x59597959,
81     0x84842a84, 0x7272d572, 0x3939e439, 0x4c4c2d4c,
82     0x5e5e655e, 0x7878fd78, 0x3838e038, 0x8c8c0a8c,
83     0xd1d163d1, 0xa5a5aea5, 0xe2e2afe2, 0x61619961,
84     0xb3b3f6b3, 0x21218421, 0x9c9c4a9c, 0x1e1e781e,
85     0x43431143, 0xc7c73bc7, 0xfcfcd7fc, 0x04041004,
86     0x51515951, 0x99995e99, 0x6d6da96d, 0x0d0d340d,
87     0xfafacffa, 0xdfdf5bdf, 0x7e7ee57e, 0x24249024,
88     0x3b3bec3b, 0xabab96ab, 0xcece1fce, 0x11114411,
89     0x8f8f068f, 0x4e4e254e, 0xb7b7e6b7, 0xebeb8beb,
90     0x3c3cf03c, 0x81813e81, 0x94946a94, 0xf7f7fbf7,
91     0xb9b9deb9, 0x13134c13, 0x2c2cb02c, 0xd3d36bd3,
92     0xe7e7bbe7, 0x6e6ea56e, 0xc4c437c4, 0x03030c03,
93     0x56564556, 0x44440d44, 0x7f7fe17f, 0xa9a99ea9,
94     0x2a2aa82a, 0xbbbbd6bb, 0xc1c123c1, 0x53535153,
95     0xdcdc57dc, 0x0b0b2c0b, 0x9d9d4e9d, 0x6c6cad6c,
96     0x3131c431, 0x7474cd74, 0xf6f6fff6, 0x46460546,
97     0xacac8aac, 0x89891e89, 0x14145014, 0xe1e1a3e1,
98     0x16165816, 0x3a3ae83a, 0x6969b969, 0x09092409,
99     0x7070dd70, 0xb6b6e2b6, 0xd0d067d0, 0xeded93ed,
100     0xcccc17cc, 0x42421542, 0x98985a98, 0xa4a4aaa4,
101     0x2828a028, 0x5c5c6d5c, 0xf8f8c7f8, 0x86862286,
102   },
103   {
104     0xd8181860, 0x2623238c, 0xb8c6c63f, 0xfbe8e887,
105     0xcb878726, 0x11b8b8da, 0x09010104, 0x0d4f4f21,
106     0x9b3636d8, 0xffa6a6a2, 0x0cd2d26f, 0x0ef5f5f3,
107     0x967979f9, 0x306f6fa1, 0x6d91917e, 0xf8525255,
108     0x4760609d, 0x35bcbcca, 0x379b9b56, 0x8a8e8e02,
109     0xd2a3a3b6, 0x6c0c0c30, 0x847b7bf1, 0x803535d4,
110     0xf51d1d74, 0xb3e0e0a7, 0x21d7d77b, 0x9cc2c22f,
111     0x432e2eb8, 0x294b4b31, 0x5dfefedf, 0xd5575741,
112     0xbd151554, 0xe87777c1, 0x923737dc, 0x9ee5e5b3,
113     0x139f9f46, 0x23f0f0e7, 0x204a4a35, 0x44dada4f,
114     0xa258587d, 0xcfc9c903, 0x7c2929a4, 0x5a0a0a28,
115     0x50b1b1fe, 0xc9a0a0ba, 0x146b6bb1, 0xd985852e,
116     0x3cbdbdce, 0x8f5d5d69, 0x90101040, 0x07f4f4f7,
117     0xddcbcb0b, 0xd33e3ef8, 0x2d050514, 0x78676781,
118     0x97e4e4b7, 0x0227279c, 0x73414119, 0xa78b8b16,
119     0xf6a7a7a6, 0xb27d7de9, 0x4995956e, 0x56d8d847,
120     0x70fbfbcb, 0xcdeeee9f, 0xbb7c7ced, 0x71666685,
121     0x7bdddd53, 0xaf17175c, 0x45474701, 0x1a9e9e42,
122     0xd4caca0f, 0x582d2db4, 0x2ebfbfc6, 0x3f07071c,
123     0xacadad8e, 0xb05a5a75, 0xef838336, 0xb63333cc,
124     0x5c636391, 0x12020208, 0x93aaaa92, 0xde7171d9,
125     0xc6c8c807, 0xd1191964, 0x3b494939, 0x5fd9d943,
126     0x31f2f2ef, 0xa8e3e3ab, 0xb95b5b71, 0xbc88881a,
127     0x3e9a9a52, 0x0b262698, 0xbf3232c8, 0x59b0b0fa,
128     0xf2e9e983, 0x770f0f3c, 0x33d5d573, 0xf480803a,
129     0x27bebec2, 0xebcdcd13, 0x893434d0, 0x3248483d,
130     0x54ffffdb, 0x8d7a7af5, 0x6490907a, 0x9d5f5f61,
131     0x3d202080, 0x0f6868bd, 0xca1a1a68, 0xb7aeae82,
132     0x7db4b4ea, 0xce54544d, 0x7f939376, 0x2f222288,
133     0x6364648d, 0x2af1f1e3, 0xcc7373d1, 0x82121248,
134     0x7a40401d, 0x48080820, 0x95c3c32b, 0xdfecec97,
135     0x4ddbdb4b, 0xc0a1a1be, 0x918d8d0e, 0xc83d3df4,
136     0x5b979766, 0x00000000, 0xf9cfcf1b, 0x6e2b2bac,
137     0xe17676c5, 0xe6828232, 0x28d6d67f, 0xc31b1b6c,
138     0x74b5b5ee, 0xbeafaf86, 0x1d6a6ab5, 0xea50505d,
139     0x57454509, 0x38f3f3eb, 0xad3030c0, 0xc4efef9b,
140     0xda3f3ffc, 0xc7555549, 0xdba2a2b2, 0xe9eaea8f,
141     0x6a656589, 0x03babad2, 0x4a2f2fbc, 0x8ec0c027,
142     0x60dede5f, 0xfc1c1c70, 0x46fdfdd3, 0x1f4d4d29,
143     0x76929272, 0xfa7575c9, 0x36060618, 0xae8a8a12,
144     0x4bb2b2f2, 0x85e6e6bf, 0x7e0e0e38, 0xe71f1f7c,
145     0x55626295, 0x3ad4d477, 0x81a8a89a, 0x52969662,
146     0x62f9f9c3, 0xa3c5c533, 0x10252594, 0xab595979,
147     0xd084842a, 0xc57272d5, 0xec3939e4, 0x164c4c2d,
148     0x945e5e65, 0x9f7878fd, 0xe53838e0, 0x988c8c0a,
149     0x17d1d163, 0xe4a5a5ae, 0xa1e2e2af, 0x4e616199,
150     0x42b3b3f6, 0x34212184, 0x089c9c4a, 0xee1e1e78,
151     0x61434311, 0xb1c7c73b, 0x4ffcfcd7, 0x24040410,
152     0xe3515159, 0x2599995e, 0x226d6da9, 0x650d0d34,
153     0x79fafacf, 0x69dfdf5b, 0xa97e7ee5, 0x19242490,
154     0xfe3b3bec, 0x9aabab96, 0xf0cece1f, 0x99111144,
155     0x838f8f06, 0x044e4e25, 0x66b7b7e6, 0xe0ebeb8b,
156     0xc13c3cf0, 0xfd81813e, 0x4094946a, 0x1cf7f7fb,
157     0x18b9b9de, 0x8b13134c, 0x512c2cb0, 0x05d3d36b,
158     0x8ce7e7bb, 0x396e6ea5, 0xaac4c437, 0x1b03030c,
159     0xdc565645, 0x5e44440d, 0xa07f7fe1, 0x88a9a99e,
160     0x672a2aa8, 0x0abbbbd6, 0x87c1c123, 0xf1535351,
161     0x72dcdc57, 0x530b0b2c, 0x019d9d4e, 0x2b6c6cad,
162     0xa43131c4, 0xf37474cd, 0x15f6f6ff, 0x4c464605,
163     0xa5acac8a, 0xb589891e, 0xb4141450, 0xbae1e1a3,
164     0xa6161658, 0xf73a3ae8, 0x066969b9, 0x41090924,
165     0xd77070dd, 0x6fb6b6e2, 0x1ed0d067, 0xd6eded93,
166     0xe2cccc17, 0x68424215, 0x2c98985a, 0xeda4a4aa,
167     0x752828a0, 0x865c5c6d, 0x6bf8f8c7, 0xc2868622,
168   },
169   {
170     0x30d81818, 0x46262323, 0x91b8c6c6, 0xcdfbe8e8,
171     0x13cb8787, 0x6d11b8b8, 0x02090101, 0x9e0d4f4f,
172     0x6c9b3636, 0x51ffa6a6, 0xb90cd2d2, 0xf70ef5f5,
173     0xf2967979, 0xde306f6f, 0x3f6d9191, 0xa4f85252,
174     0xc0476060, 0x6535bcbc, 0x2b379b9b, 0x018a8e8e,
175     0x5bd2a3a3, 0x186c0c0c, 0xf6847b7b, 0x6a803535,
176     0x3af51d1d, 0xddb3e0e0, 0xb321d7d7, 0x999cc2c2,
177     0x5c432e2e, 0x96294b4b, 0xe15dfefe, 0xaed55757,
178     0x2abd1515, 0xeee87777, 0x6e923737, 0xd79ee5e5,
179     0x23139f9f, 0xfd23f0f0, 0x94204a4a, 0xa944dada,
180     0xb0a25858, 0x8fcfc9c9, 0x527c2929, 0x145a0a0a,
181     0x7f50b1b1, 0x5dc9a0a0, 0xd6146b6b, 0x17d98585,
182     0x673cbdbd, 0xba8f5d5d, 0x20901010, 0xf507f4f4,
183     0x8bddcbcb, 0x7cd33e3e, 0x0a2d0505, 0xce786767,
184     0xd597e4e4, 0x4e022727, 0x82734141, 0x0ba78b8b,
185     0x53f6a7a7, 0xfab27d7d, 0x37499595, 0xad56d8d8,
186     0xeb70fbfb, 0xc1cdeeee, 0xf8bb7c7c, 0xcc716666,
187     0xa77bdddd, 0x2eaf1717, 0x8e454747, 0x211a9e9e,
188     0x89d4caca, 0x5a582d2d, 0x632ebfbf, 0x0e3f0707,
189     0x47acadad, 0xb4b05a5a, 0x1bef8383, 0x66b63333,
190     0xc65c6363, 0x04120202, 0x4993aaaa, 0xe2de7171,
191     0x8dc6c8c8, 0x32d11919, 0x923b4949, 0xaf5fd9d9,
192     0xf931f2f2, 0xdba8e3e3, 0xb6b95b5b, 0x0dbc8888,
193     0x293e9a9a, 0x4c0b2626, 0x64bf3232, 0x7d59b0b0,
194     0xcff2e9e9, 0x1e770f0f, 0xb733d5d5, 0x1df48080,
195     0x6127bebe, 0x87ebcdcd, 0x68893434, 0x90324848,
196     0xe354ffff, 0xf48d7a7a, 0x3d649090, 0xbe9d5f5f,
197     0x403d2020, 0xd00f6868, 0x34ca1a1a, 0x41b7aeae,
198     0x757db4b4, 0xa8ce5454, 0x3b7f9393, 0x442f2222,
199     0xc8636464, 0xff2af1f1, 0xe6cc7373, 0x24821212,
200     0x807a4040, 0x10480808, 0x9b95c3c3, 0xc5dfecec,
201     0xab4ddbdb, 0x5fc0a1a1, 0x07918d8d, 0x7ac83d3d,
202     0x335b9797, 0x00000000, 0x83f9cfcf, 0x566e2b2b,
203     0xece17676, 0x19e68282, 0xb128d6d6, 0x36c31b1b,
204     0x7774b5b5, 0x43beafaf, 0xd41d6a6a, 0xa0ea5050,
205     0x8a574545, 0xfb38f3f3, 0x60ad3030, 0xc3c4efef,
206     0x7eda3f3f, 0xaac75555, 0x59dba2a2, 0xc9e9eaea,
207     0xca6a6565, 0x6903baba, 0x5e4a2f2f, 0x9d8ec0c0,
208     0xa160dede, 0x38fc1c1c, 0xe746fdfd, 0x9a1f4d4d,
209     0x39769292, 0xeafa7575, 0x0c360606, 0x09ae8a8a,
210     0x794bb2b2, 0xd185e6e6, 0x1c7e0e0e, 0x3ee71f1f,
211     0xc4556262, 0xb53ad4d4, 0x4d81a8a8, 0x31529696,
212     0xef62f9f9, 0x97a3c5c5, 0x4a102525, 0xb2ab5959,
213     0x15d08484, 0xe4c57272, 0x72ec3939, 0x98164c4c,
214     0xbc945e5e, 0xf09f7878, 0x70e53838, 0x05988c8c,
215     0xbf17d1d1, 0x57e4a5a5, 0xd9a1e2e2, 0xc24e6161,
216     0x7b42b3b3, 0x42342121, 0x25089c9c, 0x3cee1e1e,
217     0x86614343, 0x93b1c7c7, 0xe54ffcfc, 0x08240404,
218     0xa2e35151, 0x2f259999, 0xda226d6d, 0x1a650d0d,
219     0xe979fafa, 0xa369dfdf, 0xfca97e7e, 0x48192424,
220     0x76fe3b3b, 0x4b9aabab, 0x81f0cece, 0x22991111,
221     0x03838f8f, 0x9c044e4e, 0x7366b7b7, 0xcbe0ebeb,
222     0x78c13c3c, 0x1ffd8181, 0x35409494, 0xf31cf7f7,
223     0x6f18b9b9, 0x268b1313, 0x58512c2c, 0xbb05d3d3,
224     0xd38ce7e7, 0xdc396e6e, 0x95aac4c4, 0x061b0303,
225     0xacdc5656, 0x885e4444, 0xfea07f7f, 0x4f88a9a9,
226     0x54672a2a, 0x6b0abbbb, 0x9f87c1c1, 0xa6f15353,
227     0xa572dcdc, 0x16530b0b, 0x27019d9d, 0xd82b6c6c,
228     0x62a43131, 0xe8f37474, 0xf115f6f6, 0x8c4c4646,
229     0x45a5acac, 0x0fb58989, 0x28b41414, 0xdfbae1e1,
230     0x2ca61616, 0x74f73a3a, 0xd2066969, 0x12410909,
231     0xe0d77070, 0x716fb6b6, 0xbd1ed0d0, 0xc7d6eded,
232     0x85e2cccc, 0x84684242, 0x2d2c9898, 0x55eda4a4,
233     0x50752828, 0xb8865c5c, 0xed6bf8f8, 0x11c28686,
234   },
235   {
236     0x7830d818, 0xaf462623, 0xf991b8c6, 0x6fcdfbe8,
237     0xa113cb87, 0x626d11b8, 0x05020901, 0x6e9e0d4f,
238     0xee6c9b36, 0x0451ffa6, 0xbdb90cd2, 0x06f70ef5,
239     0x80f29679, 0xcede306f, 0xef3f6d91, 0x07a4f852,
240     0xfdc04760, 0x766535bc, 0xcd2b379b, 0x8c018a8e,
241     0x155bd2a3, 0x3c186c0c, 0x8af6847b, 0xe16a8035,
242     0x693af51d, 0x47ddb3e0, 0xacb321d7, 0xed999cc2,
243     0x965c432e, 0x7a96294b, 0x21e15dfe, 0x16aed557,
244     0x412abd15, 0xb6eee877, 0xeb6e9237, 0x56d79ee5,
245     0xd923139f, 0x17fd23f0, 0x7f94204a, 0x95a944da,
246     0x25b0a258, 0xca8fcfc9, 0x8d527c29, 0x22145a0a,
247     0x4f7f50b1, 0x1a5dc9a0, 0xdad6146b, 0xab17d985,
248     0x73673cbd, 0x34ba8f5d, 0x50209010, 0x03f507f4,
249     0xc08bddcb, 0xc67cd33e, 0x110a2d05, 0xe6ce7867,
250     0x53d597e4, 0xbb4e0227, 0x58827341, 0x9d0ba78b,
251     0x0153f6a7, 0x94fab27d, 0xfb374995, 0x9fad56d8,
252     0x30eb70fb, 0x71c1cdee, 0x91f8bb7c, 0xe3cc7166,
253     0x8ea77bdd, 0x4b2eaf17, 0x468e4547, 0xdc211a9e,
254     0xc589d4ca, 0x995a582d, 0x79632ebf, 0x1b0e3f07,
255     0x2347acad, 0x2fb4b05a, 0xb51bef83, 0xff66b633,
256     0xf2c65c63, 0x0a041202, 0x384993aa, 0xa8e2de71,
257     0xcf8dc6c8, 0x7d32d119, 0x70923b49, 0x9aaf5fd9,
258     0x1df931f2, 0x48dba8e3, 0x2ab6b95b, 0x920dbc88,
259     0xc8293e9a, 0xbe4c0b26, 0xfa64bf32, 0x4a7d59b0,
260     0x6acff2e9, 0x331e770f, 0xa6b733d5, 0xba1df480,
261     0x7c6127be, 0xde87ebcd, 0xe4688934, 0x75903248,
262     0x24e354ff, 0x8ff48d7a, 0xea3d6490, 0x3ebe9d5f,
263     0xa0403d20, 0xd5d00f68, 0x7234ca1a, 0x2c41b7ae,
264     0x5e757db4, 0x19a8ce54, 0xe53b7f93, 0xaa442f22,
265     0xe9c86364, 0x12ff2af1, 0xa2e6cc73, 0x5a248212,
266     0x5d807a40, 0x28104808, 0xe89b95c3, 0x7bc5dfec,
267     0x90ab4ddb, 0x1f5fc0a1, 0x8307918d, 0xc97ac83d,
268     0xf1335b97, 0x00000000, 0xd483f9cf, 0x87566e2b,
269     0xb3ece176, 0xb019e682, 0xa9b128d6, 0x7736c31b,
270     0x5b7774b5, 0x2943beaf, 0xdfd41d6a, 0x0da0ea50,
271     0x4c8a5745, 0x18fb38f3, 0xf060ad30, 0x74c3c4ef,
272     0xc37eda3f, 0x1caac755, 0x1059dba2, 0x65c9e9ea,
273     0xecca6a65, 0x686903ba, 0x935e4a2f, 0xe79d8ec0,
274     0x81a160de, 0x6c38fc1c, 0x2ee746fd, 0x649a1f4d,
275     0xe0397692, 0xbceafa75, 0x1e0c3606, 0x9809ae8a,
276     0x40794bb2, 0x59d185e6, 0x361c7e0e, 0x633ee71f,
277     0xf7c45562, 0xa3b53ad4, 0x324d81a8, 0xf4315296,
278     0x3aef62f9, 0xf697a3c5, 0xb14a1025, 0x20b2ab59,
279     0xae15d084, 0xa7e4c572, 0xdd72ec39, 0x6198164c,
280     0x3bbc945e, 0x85f09f78, 0xd870e538, 0x8605988c,
281     0xb2bf17d1, 0x0b57e4a5, 0x4dd9a1e2, 0xf8c24e61,
282     0x457b42b3, 0xa5423421, 0xd625089c, 0x663cee1e,
283     0x52866143, 0xfc93b1c7, 0x2be54ffc, 0x14082404,
284     0x08a2e351, 0xc72f2599, 0xc4da226d, 0x391a650d,
285     0x35e979fa, 0x84a369df, 0x9bfca97e, 0xb4481924,
286     0xd776fe3b, 0x3d4b9aab, 0xd181f0ce, 0x55229911,
287     0x8903838f, 0x6b9c044e, 0x517366b7, 0x60cbe0eb,
288     0xcc78c13c, 0xbf1ffd81, 0xfe354094, 0x0cf31cf7,
289     0x676f18b9, 0x5f268b13, 0x9c58512c, 0xb8bb05d3,
290     0x5cd38ce7, 0xcbdc396e, 0xf395aac4, 0x0f061b03,
291     0x13acdc56, 0x49885e44, 0x9efea07f, 0x374f88a9,
292     0x8254672a, 0x6d6b0abb, 0xe29f87c1, 0x02a6f153,
293     0x8ba572dc, 0x2716530b, 0xd327019d, 0xc1d82b6c,
294     0xf562a431, 0xb9e8f374, 0x09f115f6, 0x438c4c46,
295     0x2645a5ac, 0x970fb589, 0x4428b414, 0x42dfbae1,
296     0x4e2ca616, 0xd274f73a, 0xd0d20669, 0x2d124109,
297     0xade0d770, 0x54716fb6, 0xb7bd1ed0, 0x7ec7d6ed,
298     0xdb85e2cc, 0x57846842, 0xc22d2c98, 0x0e55eda4,
299     0x88507528, 0x31b8865c, 0x3fed6bf8, 0xa411c286,
300   },
301   {
302     0xc07830d8, 0x05af4626, 0x7ef991b8, 0x136fcdfb,
303     0x4ca113cb, 0xa9626d11, 0x08050209, 0x426e9e0d,
304     0xadee6c9b, 0x590451ff, 0xdebdb90c, 0xfb06f70e,
305     0xef80f296, 0x5fcede30, 0xfcef3f6d, 0xaa07a4f8,
306     0x27fdc047, 0x89766535, 0xaccd2b37, 0x048c018a,
307     0x71155bd2, 0x603c186c, 0xff8af684, 0xb5e16a80,
308     0xe8693af5, 0x5347ddb3, 0xf6acb321, 0x5eed999c,
309     0x6d965c43, 0x627a9629, 0xa321e15d, 0x8216aed5,
310     0xa8412abd, 0x9fb6eee8, 0xa5eb6e92, 0x7b56d79e,
311     0x8cd92313, 0xd317fd23, 0x6a7f9420, 0x9e95a944,
312     0xfa25b0a2, 0x06ca8fcf, 0x558d527c, 0x5022145a,
313     0xe14f7f50, 0x691a5dc9, 0x7fdad614, 0x5cab17d9,
314     0x8173673c, 0xd234ba8f, 0x80502090, 0xf303f507,
315     0x16c08bdd, 0xedc67cd3, 0x28110a2d, 0x1fe6ce78,
316     0x7353d597, 0x25bb4e02, 0x32588273, 0x2c9d0ba7,
317     0x510153f6, 0xcf94fab2, 0xdcfb3749, 0x8e9fad56,
318     0x8b30eb70, 0x2371c1cd, 0xc791f8bb, 0x17e3cc71,
319     0xa68ea77b, 0xb84b2eaf, 0x02468e45, 0x84dc211a,
320     0x1ec589d4, 0x75995a58, 0x9179632e, 0x381b0e3f,
321     0x012347ac, 0xea2fb4b0, 0x6cb51bef, 0x85ff66b6,
322     0x3ff2c65c, 0x100a0412, 0x39384993, 0xafa8e2de,
323     0x0ecf8dc6, 0xc87d32d1, 0x7270923b, 0x869aaf5f,
324     0xc31df931, 0x4b48dba8, 0xe22ab6b9, 0x34920dbc,
325     0xa4c8293e, 0x2dbe4c0b, 0x8dfa64bf, 0xe94a7d59,
326     0x1b6acff2, 0x78331e77, 0xe6a6b733, 0x74ba1df4,
327     0x997c6127, 0x26de87eb, 0xbde46889, 0x7a759032,
328     0xab24e354, 0xf78ff48d, 0xf4ea3d64, 0xc23ebe9d,
329     0x1da0403d, 0x67d5d00f, 0xd07234ca, 0x192c41b7,
330     0xc95e757d, 0x9a19a8ce, 0xece53b7f, 0x0daa442f,
331     0x07e9c863, 0xdb12ff2a, 0xbfa2e6cc, 0x905a2482,
332     0x3a5d807a, 0x40281048, 0x56e89b95, 0x337bc5df,
333     0x9690ab4d, 0x611f5fc0, 0x1c830791, 0xf5c97ac8,
334     0xccf1335b, 0x00000000, 0x36d483f9, 0x4587566e,
335     0x97b3ece1, 0x64b019e6, 0xfea9b128, 0xd87736c3,
336     0xc15b7774, 0x112943be, 0x77dfd41d, 0xba0da0ea,
337     0x124c8a57, 0xcb18fb38, 0x9df060ad, 0x2b74c3c4,
338     0xe5c37eda, 0x921caac7, 0x791059db, 0x0365c9e9,
339     0x0fecca6a, 0xb9686903, 0x65935e4a, 0x4ee79d8e,
340     0xbe81a160, 0xe06c38fc, 0xbb2ee746, 0x52649a1f,
341     0xe4e03976, 0x8fbceafa, 0x301e0c36, 0x249809ae,
342     0xf940794b, 0x6359d185, 0x70361c7e, 0xf8633ee7,
343     0x37f7c455, 0xeea3b53a, 0x29324d81, 0xc4f43152,
344     0x9b3aef62, 0x66f697a3, 0x35b14a10, 0xf220b2ab,
345     0x54ae15d0, 0xb7a7e4c5, 0xd5dd72ec, 0x5a619816,
346     0xca3bbc94, 0xe785f09f, 0xddd870e5, 0x14860598,
347     0xc6b2bf17, 0x410b57e4, 0x434dd9a1, 0x2ff8c24e,
348     0xf1457b42, 0x15a54234, 0x94d62508, 0xf0663cee,
349     0x22528661, 0x76fc93b1, 0xb32be54f, 0x20140824,
350     0xb208a2e3, 0xbcc72f25, 0x4fc4da22, 0x68391a65,
351     0x8335e979, 0xb684a369, 0xd79bfca9, 0x3db44819,
352     0xc5d776fe, 0x313d4b9a, 0x3ed181f0, 0x88552299,
353     0x0c890383, 0x4a6b9c04, 0xd1517366, 0x0b60cbe0,
354     0xfdcc78c1, 0x7cbf1ffd, 0xd4fe3540, 0xeb0cf31c,
355     0xa1676f18, 0x985f268b, 0x7d9c5851, 0xd6b8bb05,
356     0x6b5cd38c, 0x57cbdc39, 0x6ef395aa, 0x180f061b,
357     0x8a13acdc, 0x1a49885e, 0xdf9efea0, 0x21374f88,
358     0x4d825467, 0xb16d6b0a, 0x46e29f87, 0xa202a6f1,
359     0xae8ba572, 0x58271653, 0x9cd32701, 0x47c1d82b,
360     0x95f562a4, 0x87b9e8f3, 0xe309f115, 0x0a438c4c,
361     0x092645a5, 0x3c970fb5, 0xa04428b4, 0x5b42dfba,
362     0xb04e2ca6, 0xcdd274f7, 0x6fd0d206, 0x482d1241,
363     0xa7ade0d7, 0xd954716f, 0xceb7bd1e, 0x3b7ec7d6,
364     0x2edb85e2, 0x2a578468, 0xb4c22d2c, 0x490e55ed,
365     0x5d885075, 0xda31b886, 0x933fed6b, 0x44a411c2,
366   },
367   {
368     0x18c07830, 0x2305af46, 0xc67ef991, 0xe8136fcd,
369     0x874ca113, 0xb8a9626d, 0x01080502, 0x4f426e9e,
370     0x36adee6c, 0xa6590451, 0xd2debdb9, 0xf5fb06f7,
371     0x79ef80f2, 0x6f5fcede, 0x91fcef3f, 0x52aa07a4,
372     0x6027fdc0, 0xbc897665, 0x9baccd2b, 0x8e048c01,
373     0xa371155b, 0x0c603c18, 0x7bff8af6, 0x35b5e16a,
374     0x1de8693a, 0xe05347dd, 0xd7f6acb3, 0xc25eed99,
375     0x2e6d965c, 0x4b627a96, 0xfea321e1, 0x578216ae,
376     0x15a8412a, 0x779fb6ee, 0x37a5eb6e, 0xe57b56d7,
377     0x9f8cd923, 0xf0d317fd, 0x4a6a7f94, 0xda9e95a9,
378     0x58fa25b0, 0xc906ca8f, 0x29558d52, 0x0a502214,
379     0xb1e14f7f, 0xa0691a5d, 0x6b7fdad6, 0x855cab17,
380     0xbd817367, 0x5dd234ba, 0x10805020, 0xf4f303f5,
381     0xcb16c08b, 0x3eedc67c, 0x0528110a, 0x671fe6ce,
382     0xe47353d5, 0x2725bb4e, 0x41325882, 0x8b2c9d0b,
383     0xa7510153, 0x7dcf94fa, 0x95dcfb37, 0xd88e9fad,
384     0xfb8b30eb, 0xee2371c1, 0x7cc791f8, 0x6617e3cc,
385     0xdda68ea7, 0x17b84b2e, 0x4702468e, 0x9e84dc21,
386     0xca1ec589, 0x2d75995a, 0xbf917963, 0x07381b0e,
387     0xad012347, 0x5aea2fb4, 0x836cb51b, 0x3385ff66,
388     0x633ff2c6, 0x02100a04, 0xaa393849, 0x71afa8e2,
389     0xc80ecf8d, 0x19c87d32, 0x49727092, 0xd9869aaf,
390     0xf2c31df9, 0xe34b48db, 0x5be22ab6, 0x8834920d,
391     0x9aa4c829, 0x262dbe4c, 0x328dfa64, 0xb0e94a7d,
392     0xe91b6acf, 0x0f78331e, 0xd5e6a6b7, 0x8074ba1d,
393     0xbe997c61, 0xcd26de87, 0x34bde468, 0x487a7590,
394     0xffab24e3, 0x7af78ff4, 0x90f4ea3d, 0x5fc23ebe,
395     0x201da040, 0x6867d5d0, 0x1ad07234, 0xae192c41,
396     0xb4c95e75, 0x549a19a8, 0x93ece53b, 0x220daa44,
397     0x6407e9c8, 0xf1db12ff, 0x73bfa2e6, 0x12905a24,
398     0x403a5d80, 0x08402810, 0xc356e89b, 0xec337bc5,
399     0xdb9690ab, 0xa1611f5f, 0x8d1c8307, 0x3df5c97a,
400     0x97ccf133, 0x00000000, 0xcf36d483, 0x2b458756,
401     0x7697b3ec, 0x8264b019, 0xd6fea9b1, 0x1bd87736,
402     0xb5c15b77, 0xaf112943, 0x6a77dfd4, 0x50ba0da0,
403     0x45124c8a, 0xf3cb18fb, 0x309df060, 0xef2b74c3,
404     0x3fe5c37e, 0x55921caa, 0xa2791059, 0xea0365c9,
405     0x650fecca, 0xbab96869, 0x2f65935e, 0xc04ee79d,
406     0xdebe81a1, 0x1ce06c38, 0xfdbb2ee7, 0x4d52649a,
407     0x92e4e039, 0x758fbcea, 0x06301e0c, 0x8a249809,
408     0xb2f94079, 0xe66359d1, 0x0e70361c, 0x1ff8633e,
409     0x6237f7c4, 0xd4eea3b5, 0xa829324d, 0x96c4f431,
410     0xf99b3aef, 0xc566f697, 0x2535b14a, 0x59f220b2,
411     0x8454ae15, 0x72b7a7e4, 0x39d5dd72, 0x4c5a6198,
412     0x5eca3bbc, 0x78e785f0, 0x38ddd870, 0x8c148605,
413     0xd1c6b2bf, 0xa5410b57, 0xe2434dd9, 0x612ff8c2,
414     0xb3f1457b, 0x2115a542, 0x9c94d625, 0x1ef0663c,
415     0x43225286, 0xc776fc93, 0xfcb32be5, 0x04201408,
416     0x51b208a2, 0x99bcc72f, 0x6d4fc4da, 0x0d68391a,
417     0xfa8335e9, 0xdfb684a3, 0x7ed79bfc, 0x243db448,
418     0x3bc5d776, 0xab313d4b, 0xce3ed181, 0x11885522,
419     0x8f0c8903, 0x4e4a6b9c, 0xb7d15173, 0xeb0b60cb,
420     0x3cfdcc78, 0x817cbf1f, 0x94d4fe35, 0xf7eb0cf3,
421     0xb9a1676f, 0x13985f26, 0x2c7d9c58, 0xd3d6b8bb,
422     0xe76b5cd3, 0x6e57cbdc, 0xc46ef395, 0x03180f06,
423     0x568a13ac, 0x441a4988, 0x7fdf9efe, 0xa921374f,
424     0x2a4d8254, 0xbbb16d6b, 0xc146e29f, 0x53a202a6,
425     0xdcae8ba5, 0x0b582716, 0x9d9cd327, 0x6c47c1d8,
426     0x3195f562, 0x7487b9e8, 0xf6e309f1, 0x460a438c,
427     0xac092645, 0x893c970f, 0x14a04428, 0xe15b42df,
428     0x16b04e2c, 0x3acdd274, 0x696fd0d2, 0x09482d12,
429     0x70a7ade0, 0xb6d95471, 0xd0ceb7bd, 0xed3b7ec7,
430     0xcc2edb85, 0x422a5784, 0x98b4c22d, 0xa4490e55,
431     0x285d8850, 0x5cda31b8, 0xf8933fed, 0x8644a411,
432   },
433   {
434     0x6018c078, 0x8c2305af, 0x3fc67ef9, 0x87e8136f,
435     0x26874ca1, 0xdab8a962, 0x04010805, 0x214f426e,
436     0xd836adee, 0xa2a65904, 0x6fd2debd, 0xf3f5fb06,
437     0xf979ef80, 0xa16f5fce, 0x7e91fcef, 0x5552aa07,
438     0x9d6027fd, 0xcabc8976, 0x569baccd, 0x028e048c,
439     0xb6a37115, 0x300c603c, 0xf17bff8a, 0xd435b5e1,
440     0x741de869, 0xa7e05347, 0x7bd7f6ac, 0x2fc25eed,
441     0xb82e6d96, 0x314b627a, 0xdffea321, 0x41578216,
442     0x5415a841, 0xc1779fb6, 0xdc37a5eb, 0xb3e57b56,
443     0x469f8cd9, 0xe7f0d317, 0x354a6a7f, 0x4fda9e95,
444     0x7d58fa25, 0x03c906ca, 0xa429558d, 0x280a5022,
445     0xfeb1e14f, 0xbaa0691a, 0xb16b7fda, 0x2e855cab,
446     0xcebd8173, 0x695dd234, 0x40108050, 0xf7f4f303,
447     0x0bcb16c0, 0xf83eedc6, 0x14052811, 0x81671fe6,
448     0xb7e47353, 0x9c2725bb, 0x19413258, 0x168b2c9d,
449     0xa6a75101, 0xe97dcf94, 0x6e95dcfb, 0x47d88e9f,
450     0xcbfb8b30, 0x9fee2371, 0xed7cc791, 0x856617e3,
451     0x53dda68e, 0x5c17b84b, 0x01470246, 0x429e84dc,
452     0x0fca1ec5, 0xb42d7599, 0xc6bf9179, 0x1c07381b,
453     0x8ead0123, 0x755aea2f, 0x36836cb5, 0xcc3385ff,
454     0x91633ff2, 0x0802100a, 0x92aa3938, 0xd971afa8,
455     0x07c80ecf, 0x6419c87d, 0x39497270, 0x43d9869a,
456     0xeff2c31d, 0xabe34b48, 0x715be22a, 0x1a883492,
457     0x529aa4c8, 0x98262dbe, 0xc8328dfa, 0xfab0e94a,
458     0x83e91b6a, 0x3c0f7833, 0x73d5e6a6, 0x3a8074ba,
459     0xc2be997c, 0x13cd26de, 0xd034bde4, 0x3d487a75,
460     0xdbffab24, 0xf57af78f, 0x7a90f4ea, 0x615fc23e,
461     0x80201da0, 0xbd6867d5, 0x681ad072, 0x82ae192c,
462     0xeab4c95e, 0x4d549a19, 0x7693ece5, 0x88220daa,
463     0x8d6407e9, 0xe3f1db12, 0xd173bfa2, 0x4812905a,
464     0x1d403a5d, 0x20084028, 0x2bc356e8, 0x97ec337b,
465     0x4bdb9690, 0xbea1611f, 0x0e8d1c83, 0xf43df5c9,
466     0x6697ccf1, 0x00000000, 0x1bcf36d4, 0xac2b4587,
467     0xc57697b3, 0x328264b0, 0x7fd6fea9, 0x6c1bd877,
468     0xeeb5c15b, 0x86af1129, 0xb56a77df, 0x5d50ba0d,
469     0x0945124c, 0xebf3cb18, 0xc0309df0, 0x9bef2b74,
470     0xfc3fe5c3, 0x4955921c, 0xb2a27910, 0x8fea0365,
471     0x89650fec, 0xd2bab968, 0xbc2f6593, 0x27c04ee7,
472     0x5fdebe81, 0x701ce06c, 0xd3fdbb2e, 0x294d5264,
473     0x7292e4e0, 0xc9758fbc, 0x1806301e, 0x128a2498,
474     0xf2b2f940, 0xbfe66359, 0x380e7036, 0x7c1ff863,
475     0x956237f7, 0x77d4eea3, 0x9aa82932, 0x6296c4f4,
476     0xc3f99b3a, 0x33c566f6, 0x942535b1, 0x7959f220,
477     0x2a8454ae, 0xd572b7a7, 0xe439d5dd, 0x2d4c5a61,
478     0x655eca3b, 0xfd78e785, 0xe038ddd8, 0x0a8c1486,
479     0x63d1c6b2, 0xaea5410b, 0xafe2434d, 0x99612ff8,
480     0xf6b3f145, 0x842115a5, 0x4a9c94d6, 0x781ef066,
481     0x11432252, 0x3bc776fc, 0xd7fcb32b, 0x10042014,
482     0x5951b208, 0x5e99bcc7, 0xa96d4fc4, 0x340d6839,
483     0xcffa8335, 0x5bdfb684, 0xe57ed79b, 0x90243db4,
484     0xec3bc5d7, 0x96ab313d, 0x1fce3ed1, 0x44118855,
485     0x068f0c89, 0x254e4a6b, 0xe6b7d151, 0x8beb0b60,
486     0xf03cfdcc, 0x3e817cbf, 0x6a94d4fe, 0xfbf7eb0c,
487     0xdeb9a167, 0x4c13985f, 0xb02c7d9c, 0x6bd3d6b8,
488     0xbbe76b5c, 0xa56e57cb, 0x37c46ef3, 0x0c03180f,
489     0x45568a13, 0x0d441a49, 0xe17fdf9e, 0x9ea92137,
490     0xa82a4d82, 0xd6bbb16d, 0x23c146e2, 0x5153a202,
491     0x57dcae8b, 0x2c0b5827, 0x4e9d9cd3, 0xad6c47c1,
492     0xc43195f5, 0xcd7487b9, 0xfff6e309, 0x05460a43,
493     0x8aac0926, 0x1e893c97, 0x5014a044, 0xa3e15b42,
494     0x5816b04e, 0xe83acdd2, 0xb9696fd0, 0x2409482d,
495     0xdd70a7ad, 0xe2b6d954, 0x67d0ceb7, 0x93ed3b7e,
496     0x17cc2edb, 0x15422a57, 0x5a98b4c2, 0xaaa4490e,
497     0xa0285d88, 0x6d5cda31, 0xc7f8933f, 0x228644a4,
498   },
499   {
500     0x186018c0, 0x238c2305, 0xc63fc67e, 0xe887e813,
501     0x8726874c, 0xb8dab8a9, 0x01040108, 0x4f214f42,
502     0x36d836ad, 0xa6a2a659, 0xd26fd2de, 0xf5f3f5fb,
503     0x79f979ef, 0x6fa16f5f, 0x917e91fc, 0x525552aa,
504     0x609d6027, 0xbccabc89, 0x9b569bac, 0x8e028e04,
505     0xa3b6a371, 0x0c300c60, 0x7bf17bff, 0x35d435b5,
506     0x1d741de8, 0xe0a7e053, 0xd77bd7f6, 0xc22fc25e,
507     0x2eb82e6d, 0x4b314b62, 0xfedffea3, 0x57415782,
508     0x155415a8, 0x77c1779f, 0x37dc37a5, 0xe5b3e57b,
509     0x9f469f8c, 0xf0e7f0d3, 0x4a354a6a, 0xda4fda9e,
510     0x587d58fa, 0xc903c906, 0x29a42955, 0x0a280a50,
511     0xb1feb1e1, 0xa0baa069, 0x6bb16b7f, 0x852e855c,
512     0xbdcebd81, 0x5d695dd2, 0x10401080, 0xf4f7f4f3,
513     0xcb0bcb16, 0x3ef83eed, 0x05140528, 0x6781671f,
514     0xe4b7e473, 0x279c2725, 0x41194132, 0x8b168b2c,
515     0xa7a6a751, 0x7de97dcf, 0x956e95dc, 0xd847d88e,
516     0xfbcbfb8b, 0xee9fee23, 0x7ced7cc7, 0x66856617,
517     0xdd53dda6, 0x175c17b8, 0x47014702, 0x9e429e84,
518     0xca0fca1e, 0x2db42d75, 0xbfc6bf91, 0x071c0738,
519     0xad8ead01, 0x5a755aea, 0x8336836c, 0x33cc3385,
520     0x6391633f, 0x02080210, 0xaa92aa39, 0x71d971af,
521     0xc807c80e, 0x196419c8, 0x49394972, 0xd943d986,
522     0xf2eff2c3, 0xe3abe34b, 0x5b715be2, 0x881a8834,
523     0x9a529aa4, 0x2698262d, 0x32c8328d, 0xb0fab0e9,
524     0xe983e91b, 0x0f3c0f78, 0xd573d5e6, 0x803a8074,
525     0xbec2be99, 0xcd13cd26, 0x34d034bd, 0x483d487a,
526     0xffdbffab, 0x7af57af7, 0x907a90f4, 0x5f615fc2,
527     0x2080201d, 0x68bd6867, 0x1a681ad0, 0xae82ae19,
528     0xb4eab4c9, 0x544d549a, 0x937693ec, 0x2288220d,
529     0x648d6407, 0xf1e3f1db, 0x73d173bf, 0x12481290,
530     0x401d403a, 0x08200840, 0xc32bc356, 0xec97ec33,
531     0xdb4bdb96, 0xa1bea161, 0x8d0e8d1c, 0x3df43df5,
532     0x976697cc, 0x00000000, 0xcf1bcf36, 0x2bac2b45,
533     0x76c57697, 0x82328264, 0xd67fd6fe, 0x1b6c1bd8,
534     0xb5eeb5c1, 0xaf86af11, 0x6ab56a77, 0x505d50ba,
535     0x45094512, 0xf3ebf3cb, 0x30c0309d, 0xef9bef2b,
536     0x3ffc3fe5, 0x55495592, 0xa2b2a279, 0xea8fea03,
537     0x6589650f, 0xbad2bab9, 0x2fbc2f65, 0xc027c04e,
538     0xde5fdebe, 0x1c701ce0, 0xfdd3fdbb, 0x4d294d52,
539     0x927292e4, 0x75c9758f, 0x06180630, 0x8a128a24,
540     0xb2f2b2f9, 0xe6bfe663, 0x0e380e70, 0x1f7c1ff8,
541     0x62956237, 0xd477d4ee, 0xa89aa829, 0x966296c4,
542     0xf9c3f99b, 0xc533c566, 0x25942535, 0x597959f2,
543     0x842a8454, 0x72d572b7, 0x39e439d5, 0x4c2d4c5a,
544     0x5e655eca, 0x78fd78e7, 0x38e038dd, 0x8c0a8c14,
545     0xd163d1c6, 0xa5aea541, 0xe2afe243, 0x6199612f,
546     0xb3f6b3f1, 0x21842115, 0x9c4a9c94, 0x1e781ef0,
547     0x43114322, 0xc73bc776, 0xfcd7fcb3, 0x04100420,
548     0x515951b2, 0x995e99bc, 0x6da96d4f, 0x0d340d68,
549     0xfacffa83, 0xdf5bdfb6, 0x7ee57ed7, 0x2490243d,
550     0x3bec3bc5, 0xab96ab31, 0xce1fce3e, 0x11441188,
551     0x8f068f0c, 0x4e254e4a, 0xb7e6b7d1, 0xeb8beb0b,
552     0x3cf03cfd, 0x813e817c, 0x946a94d4, 0xf7fbf7eb,
553     0xb9deb9a1, 0x134c1398, 0x2cb02c7d, 0xd36bd3d6,
554     0xe7bbe76b, 0x6ea56e57, 0xc437c46e, 0x030c0318,
555     0x5645568a, 0x440d441a, 0x7fe17fdf, 0xa99ea921,
556     0x2aa82a4d, 0xbbd6bbb1, 0xc123c146, 0x535153a2,
557     0xdc57dcae, 0x0b2c0b58, 0x9d4e9d9c, 0x6cad6c47,
558     0x31c43195, 0x74cd7487, 0xf6fff6e3, 0x4605460a,
559     0xac8aac09, 0x891e893c, 0x145014a0, 0xe1a3e15b,
560     0x165816b0, 0x3ae83acd, 0x69b9696f, 0x09240948,
561     0x70dd70a7, 0xb6e2b6d9, 0xd067d0ce, 0xed93ed3b,
562     0xcc17cc2e, 0x4215422a, 0x985a98b4, 0xa4aaa449,
563     0x28a0285d, 0x5c6d5cda, 0xf8c7f893, 0x86228644,
564   }
565 };
566
567 __constant u32 Cl[8][256] =
568 {
569   {
570     0xc07830d8, 0x05af4626, 0x7ef991b8, 0x136fcdfb,
571     0x4ca113cb, 0xa9626d11, 0x08050209, 0x426e9e0d,
572     0xadee6c9b, 0x590451ff, 0xdebdb90c, 0xfb06f70e,
573     0xef80f296, 0x5fcede30, 0xfcef3f6d, 0xaa07a4f8,
574     0x27fdc047, 0x89766535, 0xaccd2b37, 0x048c018a,
575     0x71155bd2, 0x603c186c, 0xff8af684, 0xb5e16a80,
576     0xe8693af5, 0x5347ddb3, 0xf6acb321, 0x5eed999c,
577     0x6d965c43, 0x627a9629, 0xa321e15d, 0x8216aed5,
578     0xa8412abd, 0x9fb6eee8, 0xa5eb6e92, 0x7b56d79e,
579     0x8cd92313, 0xd317fd23, 0x6a7f9420, 0x9e95a944,
580     0xfa25b0a2, 0x06ca8fcf, 0x558d527c, 0x5022145a,
581     0xe14f7f50, 0x691a5dc9, 0x7fdad614, 0x5cab17d9,
582     0x8173673c, 0xd234ba8f, 0x80502090, 0xf303f507,
583     0x16c08bdd, 0xedc67cd3, 0x28110a2d, 0x1fe6ce78,
584     0x7353d597, 0x25bb4e02, 0x32588273, 0x2c9d0ba7,
585     0x510153f6, 0xcf94fab2, 0xdcfb3749, 0x8e9fad56,
586     0x8b30eb70, 0x2371c1cd, 0xc791f8bb, 0x17e3cc71,
587     0xa68ea77b, 0xb84b2eaf, 0x02468e45, 0x84dc211a,
588     0x1ec589d4, 0x75995a58, 0x9179632e, 0x381b0e3f,
589     0x012347ac, 0xea2fb4b0, 0x6cb51bef, 0x85ff66b6,
590     0x3ff2c65c, 0x100a0412, 0x39384993, 0xafa8e2de,
591     0x0ecf8dc6, 0xc87d32d1, 0x7270923b, 0x869aaf5f,
592     0xc31df931, 0x4b48dba8, 0xe22ab6b9, 0x34920dbc,
593     0xa4c8293e, 0x2dbe4c0b, 0x8dfa64bf, 0xe94a7d59,
594     0x1b6acff2, 0x78331e77, 0xe6a6b733, 0x74ba1df4,
595     0x997c6127, 0x26de87eb, 0xbde46889, 0x7a759032,
596     0xab24e354, 0xf78ff48d, 0xf4ea3d64, 0xc23ebe9d,
597     0x1da0403d, 0x67d5d00f, 0xd07234ca, 0x192c41b7,
598     0xc95e757d, 0x9a19a8ce, 0xece53b7f, 0x0daa442f,
599     0x07e9c863, 0xdb12ff2a, 0xbfa2e6cc, 0x905a2482,
600     0x3a5d807a, 0x40281048, 0x56e89b95, 0x337bc5df,
601     0x9690ab4d, 0x611f5fc0, 0x1c830791, 0xf5c97ac8,
602     0xccf1335b, 0x00000000, 0x36d483f9, 0x4587566e,
603     0x97b3ece1, 0x64b019e6, 0xfea9b128, 0xd87736c3,
604     0xc15b7774, 0x112943be, 0x77dfd41d, 0xba0da0ea,
605     0x124c8a57, 0xcb18fb38, 0x9df060ad, 0x2b74c3c4,
606     0xe5c37eda, 0x921caac7, 0x791059db, 0x0365c9e9,
607     0x0fecca6a, 0xb9686903, 0x65935e4a, 0x4ee79d8e,
608     0xbe81a160, 0xe06c38fc, 0xbb2ee746, 0x52649a1f,
609     0xe4e03976, 0x8fbceafa, 0x301e0c36, 0x249809ae,
610     0xf940794b, 0x6359d185, 0x70361c7e, 0xf8633ee7,
611     0x37f7c455, 0xeea3b53a, 0x29324d81, 0xc4f43152,
612     0x9b3aef62, 0x66f697a3, 0x35b14a10, 0xf220b2ab,
613     0x54ae15d0, 0xb7a7e4c5, 0xd5dd72ec, 0x5a619816,
614     0xca3bbc94, 0xe785f09f, 0xddd870e5, 0x14860598,
615     0xc6b2bf17, 0x410b57e4, 0x434dd9a1, 0x2ff8c24e,
616     0xf1457b42, 0x15a54234, 0x94d62508, 0xf0663cee,
617     0x22528661, 0x76fc93b1, 0xb32be54f, 0x20140824,
618     0xb208a2e3, 0xbcc72f25, 0x4fc4da22, 0x68391a65,
619     0x8335e979, 0xb684a369, 0xd79bfca9, 0x3db44819,
620     0xc5d776fe, 0x313d4b9a, 0x3ed181f0, 0x88552299,
621     0x0c890383, 0x4a6b9c04, 0xd1517366, 0x0b60cbe0,
622     0xfdcc78c1, 0x7cbf1ffd, 0xd4fe3540, 0xeb0cf31c,
623     0xa1676f18, 0x985f268b, 0x7d9c5851, 0xd6b8bb05,
624     0x6b5cd38c, 0x57cbdc39, 0x6ef395aa, 0x180f061b,
625     0x8a13acdc, 0x1a49885e, 0xdf9efea0, 0x21374f88,
626     0x4d825467, 0xb16d6b0a, 0x46e29f87, 0xa202a6f1,
627     0xae8ba572, 0x58271653, 0x9cd32701, 0x47c1d82b,
628     0x95f562a4, 0x87b9e8f3, 0xe309f115, 0x0a438c4c,
629     0x092645a5, 0x3c970fb5, 0xa04428b4, 0x5b42dfba,
630     0xb04e2ca6, 0xcdd274f7, 0x6fd0d206, 0x482d1241,
631     0xa7ade0d7, 0xd954716f, 0xceb7bd1e, 0x3b7ec7d6,
632     0x2edb85e2, 0x2a578468, 0xb4c22d2c, 0x490e55ed,
633     0x5d885075, 0xda31b886, 0x933fed6b, 0x44a411c2,
634   },
635   {
636     0x18c07830, 0x2305af46, 0xc67ef991, 0xe8136fcd,
637     0x874ca113, 0xb8a9626d, 0x01080502, 0x4f426e9e,
638     0x36adee6c, 0xa6590451, 0xd2debdb9, 0xf5fb06f7,
639     0x79ef80f2, 0x6f5fcede, 0x91fcef3f, 0x52aa07a4,
640     0x6027fdc0, 0xbc897665, 0x9baccd2b, 0x8e048c01,
641     0xa371155b, 0x0c603c18, 0x7bff8af6, 0x35b5e16a,
642     0x1de8693a, 0xe05347dd, 0xd7f6acb3, 0xc25eed99,
643     0x2e6d965c, 0x4b627a96, 0xfea321e1, 0x578216ae,
644     0x15a8412a, 0x779fb6ee, 0x37a5eb6e, 0xe57b56d7,
645     0x9f8cd923, 0xf0d317fd, 0x4a6a7f94, 0xda9e95a9,
646     0x58fa25b0, 0xc906ca8f, 0x29558d52, 0x0a502214,
647     0xb1e14f7f, 0xa0691a5d, 0x6b7fdad6, 0x855cab17,
648     0xbd817367, 0x5dd234ba, 0x10805020, 0xf4f303f5,
649     0xcb16c08b, 0x3eedc67c, 0x0528110a, 0x671fe6ce,
650     0xe47353d5, 0x2725bb4e, 0x41325882, 0x8b2c9d0b,
651     0xa7510153, 0x7dcf94fa, 0x95dcfb37, 0xd88e9fad,
652     0xfb8b30eb, 0xee2371c1, 0x7cc791f8, 0x6617e3cc,
653     0xdda68ea7, 0x17b84b2e, 0x4702468e, 0x9e84dc21,
654     0xca1ec589, 0x2d75995a, 0xbf917963, 0x07381b0e,
655     0xad012347, 0x5aea2fb4, 0x836cb51b, 0x3385ff66,
656     0x633ff2c6, 0x02100a04, 0xaa393849, 0x71afa8e2,
657     0xc80ecf8d, 0x19c87d32, 0x49727092, 0xd9869aaf,
658     0xf2c31df9, 0xe34b48db, 0x5be22ab6, 0x8834920d,
659     0x9aa4c829, 0x262dbe4c, 0x328dfa64, 0xb0e94a7d,
660     0xe91b6acf, 0x0f78331e, 0xd5e6a6b7, 0x8074ba1d,
661     0xbe997c61, 0xcd26de87, 0x34bde468, 0x487a7590,
662     0xffab24e3, 0x7af78ff4, 0x90f4ea3d, 0x5fc23ebe,
663     0x201da040, 0x6867d5d0, 0x1ad07234, 0xae192c41,
664     0xb4c95e75, 0x549a19a8, 0x93ece53b, 0x220daa44,
665     0x6407e9c8, 0xf1db12ff, 0x73bfa2e6, 0x12905a24,
666     0x403a5d80, 0x08402810, 0xc356e89b, 0xec337bc5,
667     0xdb9690ab, 0xa1611f5f, 0x8d1c8307, 0x3df5c97a,
668     0x97ccf133, 0x00000000, 0xcf36d483, 0x2b458756,
669     0x7697b3ec, 0x8264b019, 0xd6fea9b1, 0x1bd87736,
670     0xb5c15b77, 0xaf112943, 0x6a77dfd4, 0x50ba0da0,
671     0x45124c8a, 0xf3cb18fb, 0x309df060, 0xef2b74c3,
672     0x3fe5c37e, 0x55921caa, 0xa2791059, 0xea0365c9,
673     0x650fecca, 0xbab96869, 0x2f65935e, 0xc04ee79d,
674     0xdebe81a1, 0x1ce06c38, 0xfdbb2ee7, 0x4d52649a,
675     0x92e4e039, 0x758fbcea, 0x06301e0c, 0x8a249809,
676     0xb2f94079, 0xe66359d1, 0x0e70361c, 0x1ff8633e,
677     0x6237f7c4, 0xd4eea3b5, 0xa829324d, 0x96c4f431,
678     0xf99b3aef, 0xc566f697, 0x2535b14a, 0x59f220b2,
679     0x8454ae15, 0x72b7a7e4, 0x39d5dd72, 0x4c5a6198,
680     0x5eca3bbc, 0x78e785f0, 0x38ddd870, 0x8c148605,
681     0xd1c6b2bf, 0xa5410b57, 0xe2434dd9, 0x612ff8c2,
682     0xb3f1457b, 0x2115a542, 0x9c94d625, 0x1ef0663c,
683     0x43225286, 0xc776fc93, 0xfcb32be5, 0x04201408,
684     0x51b208a2, 0x99bcc72f, 0x6d4fc4da, 0x0d68391a,
685     0xfa8335e9, 0xdfb684a3, 0x7ed79bfc, 0x243db448,
686     0x3bc5d776, 0xab313d4b, 0xce3ed181, 0x11885522,
687     0x8f0c8903, 0x4e4a6b9c, 0xb7d15173, 0xeb0b60cb,
688     0x3cfdcc78, 0x817cbf1f, 0x94d4fe35, 0xf7eb0cf3,
689     0xb9a1676f, 0x13985f26, 0x2c7d9c58, 0xd3d6b8bb,
690     0xe76b5cd3, 0x6e57cbdc, 0xc46ef395, 0x03180f06,
691     0x568a13ac, 0x441a4988, 0x7fdf9efe, 0xa921374f,
692     0x2a4d8254, 0xbbb16d6b, 0xc146e29f, 0x53a202a6,
693     0xdcae8ba5, 0x0b582716, 0x9d9cd327, 0x6c47c1d8,
694     0x3195f562, 0x7487b9e8, 0xf6e309f1, 0x460a438c,
695     0xac092645, 0x893c970f, 0x14a04428, 0xe15b42df,
696     0x16b04e2c, 0x3acdd274, 0x696fd0d2, 0x09482d12,
697     0x70a7ade0, 0xb6d95471, 0xd0ceb7bd, 0xed3b7ec7,
698     0xcc2edb85, 0x422a5784, 0x98b4c22d, 0xa4490e55,
699     0x285d8850, 0x5cda31b8, 0xf8933fed, 0x8644a411,
700   },
701   {
702     0x6018c078, 0x8c2305af, 0x3fc67ef9, 0x87e8136f,
703     0x26874ca1, 0xdab8a962, 0x04010805, 0x214f426e,
704     0xd836adee, 0xa2a65904, 0x6fd2debd, 0xf3f5fb06,
705     0xf979ef80, 0xa16f5fce, 0x7e91fcef, 0x5552aa07,
706     0x9d6027fd, 0xcabc8976, 0x569baccd, 0x028e048c,
707     0xb6a37115, 0x300c603c, 0xf17bff8a, 0xd435b5e1,
708     0x741de869, 0xa7e05347, 0x7bd7f6ac, 0x2fc25eed,
709     0xb82e6d96, 0x314b627a, 0xdffea321, 0x41578216,
710     0x5415a841, 0xc1779fb6, 0xdc37a5eb, 0xb3e57b56,
711     0x469f8cd9, 0xe7f0d317, 0x354a6a7f, 0x4fda9e95,
712     0x7d58fa25, 0x03c906ca, 0xa429558d, 0x280a5022,
713     0xfeb1e14f, 0xbaa0691a, 0xb16b7fda, 0x2e855cab,
714     0xcebd8173, 0x695dd234, 0x40108050, 0xf7f4f303,
715     0x0bcb16c0, 0xf83eedc6, 0x14052811, 0x81671fe6,
716     0xb7e47353, 0x9c2725bb, 0x19413258, 0x168b2c9d,
717     0xa6a75101, 0xe97dcf94, 0x6e95dcfb, 0x47d88e9f,
718     0xcbfb8b30, 0x9fee2371, 0xed7cc791, 0x856617e3,
719     0x53dda68e, 0x5c17b84b, 0x01470246, 0x429e84dc,
720     0x0fca1ec5, 0xb42d7599, 0xc6bf9179, 0x1c07381b,
721     0x8ead0123, 0x755aea2f, 0x36836cb5, 0xcc3385ff,
722     0x91633ff2, 0x0802100a, 0x92aa3938, 0xd971afa8,
723     0x07c80ecf, 0x6419c87d, 0x39497270, 0x43d9869a,
724     0xeff2c31d, 0xabe34b48, 0x715be22a, 0x1a883492,
725     0x529aa4c8, 0x98262dbe, 0xc8328dfa, 0xfab0e94a,
726     0x83e91b6a, 0x3c0f7833, 0x73d5e6a6, 0x3a8074ba,
727     0xc2be997c, 0x13cd26de, 0xd034bde4, 0x3d487a75,
728     0xdbffab24, 0xf57af78f, 0x7a90f4ea, 0x615fc23e,
729     0x80201da0, 0xbd6867d5, 0x681ad072, 0x82ae192c,
730     0xeab4c95e, 0x4d549a19, 0x7693ece5, 0x88220daa,
731     0x8d6407e9, 0xe3f1db12, 0xd173bfa2, 0x4812905a,
732     0x1d403a5d, 0x20084028, 0x2bc356e8, 0x97ec337b,
733     0x4bdb9690, 0xbea1611f, 0x0e8d1c83, 0xf43df5c9,
734     0x6697ccf1, 0x00000000, 0x1bcf36d4, 0xac2b4587,
735     0xc57697b3, 0x328264b0, 0x7fd6fea9, 0x6c1bd877,
736     0xeeb5c15b, 0x86af1129, 0xb56a77df, 0x5d50ba0d,
737     0x0945124c, 0xebf3cb18, 0xc0309df0, 0x9bef2b74,
738     0xfc3fe5c3, 0x4955921c, 0xb2a27910, 0x8fea0365,
739     0x89650fec, 0xd2bab968, 0xbc2f6593, 0x27c04ee7,
740     0x5fdebe81, 0x701ce06c, 0xd3fdbb2e, 0x294d5264,
741     0x7292e4e0, 0xc9758fbc, 0x1806301e, 0x128a2498,
742     0xf2b2f940, 0xbfe66359, 0x380e7036, 0x7c1ff863,
743     0x956237f7, 0x77d4eea3, 0x9aa82932, 0x6296c4f4,
744     0xc3f99b3a, 0x33c566f6, 0x942535b1, 0x7959f220,
745     0x2a8454ae, 0xd572b7a7, 0xe439d5dd, 0x2d4c5a61,
746     0x655eca3b, 0xfd78e785, 0xe038ddd8, 0x0a8c1486,
747     0x63d1c6b2, 0xaea5410b, 0xafe2434d, 0x99612ff8,
748     0xf6b3f145, 0x842115a5, 0x4a9c94d6, 0x781ef066,
749     0x11432252, 0x3bc776fc, 0xd7fcb32b, 0x10042014,
750     0x5951b208, 0x5e99bcc7, 0xa96d4fc4, 0x340d6839,
751     0xcffa8335, 0x5bdfb684, 0xe57ed79b, 0x90243db4,
752     0xec3bc5d7, 0x96ab313d, 0x1fce3ed1, 0x44118855,
753     0x068f0c89, 0x254e4a6b, 0xe6b7d151, 0x8beb0b60,
754     0xf03cfdcc, 0x3e817cbf, 0x6a94d4fe, 0xfbf7eb0c,
755     0xdeb9a167, 0x4c13985f, 0xb02c7d9c, 0x6bd3d6b8,
756     0xbbe76b5c, 0xa56e57cb, 0x37c46ef3, 0x0c03180f,
757     0x45568a13, 0x0d441a49, 0xe17fdf9e, 0x9ea92137,
758     0xa82a4d82, 0xd6bbb16d, 0x23c146e2, 0x5153a202,
759     0x57dcae8b, 0x2c0b5827, 0x4e9d9cd3, 0xad6c47c1,
760     0xc43195f5, 0xcd7487b9, 0xfff6e309, 0x05460a43,
761     0x8aac0926, 0x1e893c97, 0x5014a044, 0xa3e15b42,
762     0x5816b04e, 0xe83acdd2, 0xb9696fd0, 0x2409482d,
763     0xdd70a7ad, 0xe2b6d954, 0x67d0ceb7, 0x93ed3b7e,
764     0x17cc2edb, 0x15422a57, 0x5a98b4c2, 0xaaa4490e,
765     0xa0285d88, 0x6d5cda31, 0xc7f8933f, 0x228644a4,
766   },
767   {
768     0x186018c0, 0x238c2305, 0xc63fc67e, 0xe887e813,
769     0x8726874c, 0xb8dab8a9, 0x01040108, 0x4f214f42,
770     0x36d836ad, 0xa6a2a659, 0xd26fd2de, 0xf5f3f5fb,
771     0x79f979ef, 0x6fa16f5f, 0x917e91fc, 0x525552aa,
772     0x609d6027, 0xbccabc89, 0x9b569bac, 0x8e028e04,
773     0xa3b6a371, 0x0c300c60, 0x7bf17bff, 0x35d435b5,
774     0x1d741de8, 0xe0a7e053, 0xd77bd7f6, 0xc22fc25e,
775     0x2eb82e6d, 0x4b314b62, 0xfedffea3, 0x57415782,
776     0x155415a8, 0x77c1779f, 0x37dc37a5, 0xe5b3e57b,
777     0x9f469f8c, 0xf0e7f0d3, 0x4a354a6a, 0xda4fda9e,
778     0x587d58fa, 0xc903c906, 0x29a42955, 0x0a280a50,
779     0xb1feb1e1, 0xa0baa069, 0x6bb16b7f, 0x852e855c,
780     0xbdcebd81, 0x5d695dd2, 0x10401080, 0xf4f7f4f3,
781     0xcb0bcb16, 0x3ef83eed, 0x05140528, 0x6781671f,
782     0xe4b7e473, 0x279c2725, 0x41194132, 0x8b168b2c,
783     0xa7a6a751, 0x7de97dcf, 0x956e95dc, 0xd847d88e,
784     0xfbcbfb8b, 0xee9fee23, 0x7ced7cc7, 0x66856617,
785     0xdd53dda6, 0x175c17b8, 0x47014702, 0x9e429e84,
786     0xca0fca1e, 0x2db42d75, 0xbfc6bf91, 0x071c0738,
787     0xad8ead01, 0x5a755aea, 0x8336836c, 0x33cc3385,
788     0x6391633f, 0x02080210, 0xaa92aa39, 0x71d971af,
789     0xc807c80e, 0x196419c8, 0x49394972, 0xd943d986,
790     0xf2eff2c3, 0xe3abe34b, 0x5b715be2, 0x881a8834,
791     0x9a529aa4, 0x2698262d, 0x32c8328d, 0xb0fab0e9,
792     0xe983e91b, 0x0f3c0f78, 0xd573d5e6, 0x803a8074,
793     0xbec2be99, 0xcd13cd26, 0x34d034bd, 0x483d487a,
794     0xffdbffab, 0x7af57af7, 0x907a90f4, 0x5f615fc2,
795     0x2080201d, 0x68bd6867, 0x1a681ad0, 0xae82ae19,
796     0xb4eab4c9, 0x544d549a, 0x937693ec, 0x2288220d,
797     0x648d6407, 0xf1e3f1db, 0x73d173bf, 0x12481290,
798     0x401d403a, 0x08200840, 0xc32bc356, 0xec97ec33,
799     0xdb4bdb96, 0xa1bea161, 0x8d0e8d1c, 0x3df43df5,
800     0x976697cc, 0x00000000, 0xcf1bcf36, 0x2bac2b45,
801     0x76c57697, 0x82328264, 0xd67fd6fe, 0x1b6c1bd8,
802     0xb5eeb5c1, 0xaf86af11, 0x6ab56a77, 0x505d50ba,
803     0x45094512, 0xf3ebf3cb, 0x30c0309d, 0xef9bef2b,
804     0x3ffc3fe5, 0x55495592, 0xa2b2a279, 0xea8fea03,
805     0x6589650f, 0xbad2bab9, 0x2fbc2f65, 0xc027c04e,
806     0xde5fdebe, 0x1c701ce0, 0xfdd3fdbb, 0x4d294d52,
807     0x927292e4, 0x75c9758f, 0x06180630, 0x8a128a24,
808     0xb2f2b2f9, 0xe6bfe663, 0x0e380e70, 0x1f7c1ff8,
809     0x62956237, 0xd477d4ee, 0xa89aa829, 0x966296c4,
810     0xf9c3f99b, 0xc533c566, 0x25942535, 0x597959f2,
811     0x842a8454, 0x72d572b7, 0x39e439d5, 0x4c2d4c5a,
812     0x5e655eca, 0x78fd78e7, 0x38e038dd, 0x8c0a8c14,
813     0xd163d1c6, 0xa5aea541, 0xe2afe243, 0x6199612f,
814     0xb3f6b3f1, 0x21842115, 0x9c4a9c94, 0x1e781ef0,
815     0x43114322, 0xc73bc776, 0xfcd7fcb3, 0x04100420,
816     0x515951b2, 0x995e99bc, 0x6da96d4f, 0x0d340d68,
817     0xfacffa83, 0xdf5bdfb6, 0x7ee57ed7, 0x2490243d,
818     0x3bec3bc5, 0xab96ab31, 0xce1fce3e, 0x11441188,
819     0x8f068f0c, 0x4e254e4a, 0xb7e6b7d1, 0xeb8beb0b,
820     0x3cf03cfd, 0x813e817c, 0x946a94d4, 0xf7fbf7eb,
821     0xb9deb9a1, 0x134c1398, 0x2cb02c7d, 0xd36bd3d6,
822     0xe7bbe76b, 0x6ea56e57, 0xc437c46e, 0x030c0318,
823     0x5645568a, 0x440d441a, 0x7fe17fdf, 0xa99ea921,
824     0x2aa82a4d, 0xbbd6bbb1, 0xc123c146, 0x535153a2,
825     0xdc57dcae, 0x0b2c0b58, 0x9d4e9d9c, 0x6cad6c47,
826     0x31c43195, 0x74cd7487, 0xf6fff6e3, 0x4605460a,
827     0xac8aac09, 0x891e893c, 0x145014a0, 0xe1a3e15b,
828     0x165816b0, 0x3ae83acd, 0x69b9696f, 0x09240948,
829     0x70dd70a7, 0xb6e2b6d9, 0xd067d0ce, 0xed93ed3b,
830     0xcc17cc2e, 0x4215422a, 0x985a98b4, 0xa4aaa449,
831     0x28a0285d, 0x5c6d5cda, 0xf8c7f893, 0x86228644,
832   },
833   {
834     0x18186018, 0x23238c23, 0xc6c63fc6, 0xe8e887e8,
835     0x87872687, 0xb8b8dab8, 0x01010401, 0x4f4f214f,
836     0x3636d836, 0xa6a6a2a6, 0xd2d26fd2, 0xf5f5f3f5,
837     0x7979f979, 0x6f6fa16f, 0x91917e91, 0x52525552,
838     0x60609d60, 0xbcbccabc, 0x9b9b569b, 0x8e8e028e,
839     0xa3a3b6a3, 0x0c0c300c, 0x7b7bf17b, 0x3535d435,
840     0x1d1d741d, 0xe0e0a7e0, 0xd7d77bd7, 0xc2c22fc2,
841     0x2e2eb82e, 0x4b4b314b, 0xfefedffe, 0x57574157,
842     0x15155415, 0x7777c177, 0x3737dc37, 0xe5e5b3e5,
843     0x9f9f469f, 0xf0f0e7f0, 0x4a4a354a, 0xdada4fda,
844     0x58587d58, 0xc9c903c9, 0x2929a429, 0x0a0a280a,
845     0xb1b1feb1, 0xa0a0baa0, 0x6b6bb16b, 0x85852e85,
846     0xbdbdcebd, 0x5d5d695d, 0x10104010, 0xf4f4f7f4,
847     0xcbcb0bcb, 0x3e3ef83e, 0x05051405, 0x67678167,
848     0xe4e4b7e4, 0x27279c27, 0x41411941, 0x8b8b168b,
849     0xa7a7a6a7, 0x7d7de97d, 0x95956e95, 0xd8d847d8,
850     0xfbfbcbfb, 0xeeee9fee, 0x7c7ced7c, 0x66668566,
851     0xdddd53dd, 0x17175c17, 0x47470147, 0x9e9e429e,
852     0xcaca0fca, 0x2d2db42d, 0xbfbfc6bf, 0x07071c07,
853     0xadad8ead, 0x5a5a755a, 0x83833683, 0x3333cc33,
854     0x63639163, 0x02020802, 0xaaaa92aa, 0x7171d971,
855     0xc8c807c8, 0x19196419, 0x49493949, 0xd9d943d9,
856     0xf2f2eff2, 0xe3e3abe3, 0x5b5b715b, 0x88881a88,
857     0x9a9a529a, 0x26269826, 0x3232c832, 0xb0b0fab0,
858     0xe9e983e9, 0x0f0f3c0f, 0xd5d573d5, 0x80803a80,
859     0xbebec2be, 0xcdcd13cd, 0x3434d034, 0x48483d48,
860     0xffffdbff, 0x7a7af57a, 0x90907a90, 0x5f5f615f,
861     0x20208020, 0x6868bd68, 0x1a1a681a, 0xaeae82ae,
862     0xb4b4eab4, 0x54544d54, 0x93937693, 0x22228822,
863     0x64648d64, 0xf1f1e3f1, 0x7373d173, 0x12124812,
864     0x40401d40, 0x08082008, 0xc3c32bc3, 0xecec97ec,
865     0xdbdb4bdb, 0xa1a1bea1, 0x8d8d0e8d, 0x3d3df43d,
866     0x97976697, 0x00000000, 0xcfcf1bcf, 0x2b2bac2b,
867     0x7676c576, 0x82823282, 0xd6d67fd6, 0x1b1b6c1b,
868     0xb5b5eeb5, 0xafaf86af, 0x6a6ab56a, 0x50505d50,
869     0x45450945, 0xf3f3ebf3, 0x3030c030, 0xefef9bef,
870     0x3f3ffc3f, 0x55554955, 0xa2a2b2a2, 0xeaea8fea,
871     0x65658965, 0xbabad2ba, 0x2f2fbc2f, 0xc0c027c0,
872     0xdede5fde, 0x1c1c701c, 0xfdfdd3fd, 0x4d4d294d,
873     0x92927292, 0x7575c975, 0x06061806, 0x8a8a128a,
874     0xb2b2f2b2, 0xe6e6bfe6, 0x0e0e380e, 0x1f1f7c1f,
875     0x62629562, 0xd4d477d4, 0xa8a89aa8, 0x96966296,
876     0xf9f9c3f9, 0xc5c533c5, 0x25259425, 0x59597959,
877     0x84842a84, 0x7272d572, 0x3939e439, 0x4c4c2d4c,
878     0x5e5e655e, 0x7878fd78, 0x3838e038, 0x8c8c0a8c,
879     0xd1d163d1, 0xa5a5aea5, 0xe2e2afe2, 0x61619961,
880     0xb3b3f6b3, 0x21218421, 0x9c9c4a9c, 0x1e1e781e,
881     0x43431143, 0xc7c73bc7, 0xfcfcd7fc, 0x04041004,
882     0x51515951, 0x99995e99, 0x6d6da96d, 0x0d0d340d,
883     0xfafacffa, 0xdfdf5bdf, 0x7e7ee57e, 0x24249024,
884     0x3b3bec3b, 0xabab96ab, 0xcece1fce, 0x11114411,
885     0x8f8f068f, 0x4e4e254e, 0xb7b7e6b7, 0xebeb8beb,
886     0x3c3cf03c, 0x81813e81, 0x94946a94, 0xf7f7fbf7,
887     0xb9b9deb9, 0x13134c13, 0x2c2cb02c, 0xd3d36bd3,
888     0xe7e7bbe7, 0x6e6ea56e, 0xc4c437c4, 0x03030c03,
889     0x56564556, 0x44440d44, 0x7f7fe17f, 0xa9a99ea9,
890     0x2a2aa82a, 0xbbbbd6bb, 0xc1c123c1, 0x53535153,
891     0xdcdc57dc, 0x0b0b2c0b, 0x9d9d4e9d, 0x6c6cad6c,
892     0x3131c431, 0x7474cd74, 0xf6f6fff6, 0x46460546,
893     0xacac8aac, 0x89891e89, 0x14145014, 0xe1e1a3e1,
894     0x16165816, 0x3a3ae83a, 0x6969b969, 0x09092409,
895     0x7070dd70, 0xb6b6e2b6, 0xd0d067d0, 0xeded93ed,
896     0xcccc17cc, 0x42421542, 0x98985a98, 0xa4a4aaa4,
897     0x2828a028, 0x5c5c6d5c, 0xf8f8c7f8, 0x86862286,
898   },
899   {
900     0xd8181860, 0x2623238c, 0xb8c6c63f, 0xfbe8e887,
901     0xcb878726, 0x11b8b8da, 0x09010104, 0x0d4f4f21,
902     0x9b3636d8, 0xffa6a6a2, 0x0cd2d26f, 0x0ef5f5f3,
903     0x967979f9, 0x306f6fa1, 0x6d91917e, 0xf8525255,
904     0x4760609d, 0x35bcbcca, 0x379b9b56, 0x8a8e8e02,
905     0xd2a3a3b6, 0x6c0c0c30, 0x847b7bf1, 0x803535d4,
906     0xf51d1d74, 0xb3e0e0a7, 0x21d7d77b, 0x9cc2c22f,
907     0x432e2eb8, 0x294b4b31, 0x5dfefedf, 0xd5575741,
908     0xbd151554, 0xe87777c1, 0x923737dc, 0x9ee5e5b3,
909     0x139f9f46, 0x23f0f0e7, 0x204a4a35, 0x44dada4f,
910     0xa258587d, 0xcfc9c903, 0x7c2929a4, 0x5a0a0a28,
911     0x50b1b1fe, 0xc9a0a0ba, 0x146b6bb1, 0xd985852e,
912     0x3cbdbdce, 0x8f5d5d69, 0x90101040, 0x07f4f4f7,
913     0xddcbcb0b, 0xd33e3ef8, 0x2d050514, 0x78676781,
914     0x97e4e4b7, 0x0227279c, 0x73414119, 0xa78b8b16,
915     0xf6a7a7a6, 0xb27d7de9, 0x4995956e, 0x56d8d847,
916     0x70fbfbcb, 0xcdeeee9f, 0xbb7c7ced, 0x71666685,
917     0x7bdddd53, 0xaf17175c, 0x45474701, 0x1a9e9e42,
918     0xd4caca0f, 0x582d2db4, 0x2ebfbfc6, 0x3f07071c,
919     0xacadad8e, 0xb05a5a75, 0xef838336, 0xb63333cc,
920     0x5c636391, 0x12020208, 0x93aaaa92, 0xde7171d9,
921     0xc6c8c807, 0xd1191964, 0x3b494939, 0x5fd9d943,
922     0x31f2f2ef, 0xa8e3e3ab, 0xb95b5b71, 0xbc88881a,
923     0x3e9a9a52, 0x0b262698, 0xbf3232c8, 0x59b0b0fa,
924     0xf2e9e983, 0x770f0f3c, 0x33d5d573, 0xf480803a,
925     0x27bebec2, 0xebcdcd13, 0x893434d0, 0x3248483d,
926     0x54ffffdb, 0x8d7a7af5, 0x6490907a, 0x9d5f5f61,
927     0x3d202080, 0x0f6868bd, 0xca1a1a68, 0xb7aeae82,
928     0x7db4b4ea, 0xce54544d, 0x7f939376, 0x2f222288,
929     0x6364648d, 0x2af1f1e3, 0xcc7373d1, 0x82121248,
930     0x7a40401d, 0x48080820, 0x95c3c32b, 0xdfecec97,
931     0x4ddbdb4b, 0xc0a1a1be, 0x918d8d0e, 0xc83d3df4,
932     0x5b979766, 0x00000000, 0xf9cfcf1b, 0x6e2b2bac,
933     0xe17676c5, 0xe6828232, 0x28d6d67f, 0xc31b1b6c,
934     0x74b5b5ee, 0xbeafaf86, 0x1d6a6ab5, 0xea50505d,
935     0x57454509, 0x38f3f3eb, 0xad3030c0, 0xc4efef9b,
936     0xda3f3ffc, 0xc7555549, 0xdba2a2b2, 0xe9eaea8f,
937     0x6a656589, 0x03babad2, 0x4a2f2fbc, 0x8ec0c027,
938     0x60dede5f, 0xfc1c1c70, 0x46fdfdd3, 0x1f4d4d29,
939     0x76929272, 0xfa7575c9, 0x36060618, 0xae8a8a12,
940     0x4bb2b2f2, 0x85e6e6bf, 0x7e0e0e38, 0xe71f1f7c,
941     0x55626295, 0x3ad4d477, 0x81a8a89a, 0x52969662,
942     0x62f9f9c3, 0xa3c5c533, 0x10252594, 0xab595979,
943     0xd084842a, 0xc57272d5, 0xec3939e4, 0x164c4c2d,
944     0x945e5e65, 0x9f7878fd, 0xe53838e0, 0x988c8c0a,
945     0x17d1d163, 0xe4a5a5ae, 0xa1e2e2af, 0x4e616199,
946     0x42b3b3f6, 0x34212184, 0x089c9c4a, 0xee1e1e78,
947     0x61434311, 0xb1c7c73b, 0x4ffcfcd7, 0x24040410,
948     0xe3515159, 0x2599995e, 0x226d6da9, 0x650d0d34,
949     0x79fafacf, 0x69dfdf5b, 0xa97e7ee5, 0x19242490,
950     0xfe3b3bec, 0x9aabab96, 0xf0cece1f, 0x99111144,
951     0x838f8f06, 0x044e4e25, 0x66b7b7e6, 0xe0ebeb8b,
952     0xc13c3cf0, 0xfd81813e, 0x4094946a, 0x1cf7f7fb,
953     0x18b9b9de, 0x8b13134c, 0x512c2cb0, 0x05d3d36b,
954     0x8ce7e7bb, 0x396e6ea5, 0xaac4c437, 0x1b03030c,
955     0xdc565645, 0x5e44440d, 0xa07f7fe1, 0x88a9a99e,
956     0x672a2aa8, 0x0abbbbd6, 0x87c1c123, 0xf1535351,
957     0x72dcdc57, 0x530b0b2c, 0x019d9d4e, 0x2b6c6cad,
958     0xa43131c4, 0xf37474cd, 0x15f6f6ff, 0x4c464605,
959     0xa5acac8a, 0xb589891e, 0xb4141450, 0xbae1e1a3,
960     0xa6161658, 0xf73a3ae8, 0x066969b9, 0x41090924,
961     0xd77070dd, 0x6fb6b6e2, 0x1ed0d067, 0xd6eded93,
962     0xe2cccc17, 0x68424215, 0x2c98985a, 0xeda4a4aa,
963     0x752828a0, 0x865c5c6d, 0x6bf8f8c7, 0xc2868622,
964   },
965   {
966     0x30d81818, 0x46262323, 0x91b8c6c6, 0xcdfbe8e8,
967     0x13cb8787, 0x6d11b8b8, 0x02090101, 0x9e0d4f4f,
968     0x6c9b3636, 0x51ffa6a6, 0xb90cd2d2, 0xf70ef5f5,
969     0xf2967979, 0xde306f6f, 0x3f6d9191, 0xa4f85252,
970     0xc0476060, 0x6535bcbc, 0x2b379b9b, 0x018a8e8e,
971     0x5bd2a3a3, 0x186c0c0c, 0xf6847b7b, 0x6a803535,
972     0x3af51d1d, 0xddb3e0e0, 0xb321d7d7, 0x999cc2c2,
973     0x5c432e2e, 0x96294b4b, 0xe15dfefe, 0xaed55757,
974     0x2abd1515, 0xeee87777, 0x6e923737, 0xd79ee5e5,
975     0x23139f9f, 0xfd23f0f0, 0x94204a4a, 0xa944dada,
976     0xb0a25858, 0x8fcfc9c9, 0x527c2929, 0x145a0a0a,
977     0x7f50b1b1, 0x5dc9a0a0, 0xd6146b6b, 0x17d98585,
978     0x673cbdbd, 0xba8f5d5d, 0x20901010, 0xf507f4f4,
979     0x8bddcbcb, 0x7cd33e3e, 0x0a2d0505, 0xce786767,
980     0xd597e4e4, 0x4e022727, 0x82734141, 0x0ba78b8b,
981     0x53f6a7a7, 0xfab27d7d, 0x37499595, 0xad56d8d8,
982     0xeb70fbfb, 0xc1cdeeee, 0xf8bb7c7c, 0xcc716666,
983     0xa77bdddd, 0x2eaf1717, 0x8e454747, 0x211a9e9e,
984     0x89d4caca, 0x5a582d2d, 0x632ebfbf, 0x0e3f0707,
985     0x47acadad, 0xb4b05a5a, 0x1bef8383, 0x66b63333,
986     0xc65c6363, 0x04120202, 0x4993aaaa, 0xe2de7171,
987     0x8dc6c8c8, 0x32d11919, 0x923b4949, 0xaf5fd9d9,
988     0xf931f2f2, 0xdba8e3e3, 0xb6b95b5b, 0x0dbc8888,
989     0x293e9a9a, 0x4c0b2626, 0x64bf3232, 0x7d59b0b0,
990     0xcff2e9e9, 0x1e770f0f, 0xb733d5d5, 0x1df48080,
991     0x6127bebe, 0x87ebcdcd, 0x68893434, 0x90324848,
992     0xe354ffff, 0xf48d7a7a, 0x3d649090, 0xbe9d5f5f,
993     0x403d2020, 0xd00f6868, 0x34ca1a1a, 0x41b7aeae,
994     0x757db4b4, 0xa8ce5454, 0x3b7f9393, 0x442f2222,
995     0xc8636464, 0xff2af1f1, 0xe6cc7373, 0x24821212,
996     0x807a4040, 0x10480808, 0x9b95c3c3, 0xc5dfecec,
997     0xab4ddbdb, 0x5fc0a1a1, 0x07918d8d, 0x7ac83d3d,
998     0x335b9797, 0x00000000, 0x83f9cfcf, 0x566e2b2b,
999     0xece17676, 0x19e68282, 0xb128d6d6, 0x36c31b1b,
1000     0x7774b5b5, 0x43beafaf, 0xd41d6a6a, 0xa0ea5050,
1001     0x8a574545, 0xfb38f3f3, 0x60ad3030, 0xc3c4efef,
1002     0x7eda3f3f, 0xaac75555, 0x59dba2a2, 0xc9e9eaea,
1003     0xca6a6565, 0x6903baba, 0x5e4a2f2f, 0x9d8ec0c0,
1004     0xa160dede, 0x38fc1c1c, 0xe746fdfd, 0x9a1f4d4d,
1005     0x39769292, 0xeafa7575, 0x0c360606, 0x09ae8a8a,
1006     0x794bb2b2, 0xd185e6e6, 0x1c7e0e0e, 0x3ee71f1f,
1007     0xc4556262, 0xb53ad4d4, 0x4d81a8a8, 0x31529696,
1008     0xef62f9f9, 0x97a3c5c5, 0x4a102525, 0xb2ab5959,
1009     0x15d08484, 0xe4c57272, 0x72ec3939, 0x98164c4c,
1010     0xbc945e5e, 0xf09f7878, 0x70e53838, 0x05988c8c,
1011     0xbf17d1d1, 0x57e4a5a5, 0xd9a1e2e2, 0xc24e6161,
1012     0x7b42b3b3, 0x42342121, 0x25089c9c, 0x3cee1e1e,
1013     0x86614343, 0x93b1c7c7, 0xe54ffcfc, 0x08240404,
1014     0xa2e35151, 0x2f259999, 0xda226d6d, 0x1a650d0d,
1015     0xe979fafa, 0xa369dfdf, 0xfca97e7e, 0x48192424,
1016     0x76fe3b3b, 0x4b9aabab, 0x81f0cece, 0x22991111,
1017     0x03838f8f, 0x9c044e4e, 0x7366b7b7, 0xcbe0ebeb,
1018     0x78c13c3c, 0x1ffd8181, 0x35409494, 0xf31cf7f7,
1019     0x6f18b9b9, 0x268b1313, 0x58512c2c, 0xbb05d3d3,
1020     0xd38ce7e7, 0xdc396e6e, 0x95aac4c4, 0x061b0303,
1021     0xacdc5656, 0x885e4444, 0xfea07f7f, 0x4f88a9a9,
1022     0x54672a2a, 0x6b0abbbb, 0x9f87c1c1, 0xa6f15353,
1023     0xa572dcdc, 0x16530b0b, 0x27019d9d, 0xd82b6c6c,
1024     0x62a43131, 0xe8f37474, 0xf115f6f6, 0x8c4c4646,
1025     0x45a5acac, 0x0fb58989, 0x28b41414, 0xdfbae1e1,
1026     0x2ca61616, 0x74f73a3a, 0xd2066969, 0x12410909,
1027     0xe0d77070, 0x716fb6b6, 0xbd1ed0d0, 0xc7d6eded,
1028     0x85e2cccc, 0x84684242, 0x2d2c9898, 0x55eda4a4,
1029     0x50752828, 0xb8865c5c, 0xed6bf8f8, 0x11c28686,
1030   },
1031   {
1032     0x7830d818, 0xaf462623, 0xf991b8c6, 0x6fcdfbe8,
1033     0xa113cb87, 0x626d11b8, 0x05020901, 0x6e9e0d4f,
1034     0xee6c9b36, 0x0451ffa6, 0xbdb90cd2, 0x06f70ef5,
1035     0x80f29679, 0xcede306f, 0xef3f6d91, 0x07a4f852,
1036     0xfdc04760, 0x766535bc, 0xcd2b379b, 0x8c018a8e,
1037     0x155bd2a3, 0x3c186c0c, 0x8af6847b, 0xe16a8035,
1038     0x693af51d, 0x47ddb3e0, 0xacb321d7, 0xed999cc2,
1039     0x965c432e, 0x7a96294b, 0x21e15dfe, 0x16aed557,
1040     0x412abd15, 0xb6eee877, 0xeb6e9237, 0x56d79ee5,
1041     0xd923139f, 0x17fd23f0, 0x7f94204a, 0x95a944da,
1042     0x25b0a258, 0xca8fcfc9, 0x8d527c29, 0x22145a0a,
1043     0x4f7f50b1, 0x1a5dc9a0, 0xdad6146b, 0xab17d985,
1044     0x73673cbd, 0x34ba8f5d, 0x50209010, 0x03f507f4,
1045     0xc08bddcb, 0xc67cd33e, 0x110a2d05, 0xe6ce7867,
1046     0x53d597e4, 0xbb4e0227, 0x58827341, 0x9d0ba78b,
1047     0x0153f6a7, 0x94fab27d, 0xfb374995, 0x9fad56d8,
1048     0x30eb70fb, 0x71c1cdee, 0x91f8bb7c, 0xe3cc7166,
1049     0x8ea77bdd, 0x4b2eaf17, 0x468e4547, 0xdc211a9e,
1050     0xc589d4ca, 0x995a582d, 0x79632ebf, 0x1b0e3f07,
1051     0x2347acad, 0x2fb4b05a, 0xb51bef83, 0xff66b633,
1052     0xf2c65c63, 0x0a041202, 0x384993aa, 0xa8e2de71,
1053     0xcf8dc6c8, 0x7d32d119, 0x70923b49, 0x9aaf5fd9,
1054     0x1df931f2, 0x48dba8e3, 0x2ab6b95b, 0x920dbc88,
1055     0xc8293e9a, 0xbe4c0b26, 0xfa64bf32, 0x4a7d59b0,
1056     0x6acff2e9, 0x331e770f, 0xa6b733d5, 0xba1df480,
1057     0x7c6127be, 0xde87ebcd, 0xe4688934, 0x75903248,
1058     0x24e354ff, 0x8ff48d7a, 0xea3d6490, 0x3ebe9d5f,
1059     0xa0403d20, 0xd5d00f68, 0x7234ca1a, 0x2c41b7ae,
1060     0x5e757db4, 0x19a8ce54, 0xe53b7f93, 0xaa442f22,
1061     0xe9c86364, 0x12ff2af1, 0xa2e6cc73, 0x5a248212,
1062     0x5d807a40, 0x28104808, 0xe89b95c3, 0x7bc5dfec,
1063     0x90ab4ddb, 0x1f5fc0a1, 0x8307918d, 0xc97ac83d,
1064     0xf1335b97, 0x00000000, 0xd483f9cf, 0x87566e2b,
1065     0xb3ece176, 0xb019e682, 0xa9b128d6, 0x7736c31b,
1066     0x5b7774b5, 0x2943beaf, 0xdfd41d6a, 0x0da0ea50,
1067     0x4c8a5745, 0x18fb38f3, 0xf060ad30, 0x74c3c4ef,
1068     0xc37eda3f, 0x1caac755, 0x1059dba2, 0x65c9e9ea,
1069     0xecca6a65, 0x686903ba, 0x935e4a2f, 0xe79d8ec0,
1070     0x81a160de, 0x6c38fc1c, 0x2ee746fd, 0x649a1f4d,
1071     0xe0397692, 0xbceafa75, 0x1e0c3606, 0x9809ae8a,
1072     0x40794bb2, 0x59d185e6, 0x361c7e0e, 0x633ee71f,
1073     0xf7c45562, 0xa3b53ad4, 0x324d81a8, 0xf4315296,
1074     0x3aef62f9, 0xf697a3c5, 0xb14a1025, 0x20b2ab59,
1075     0xae15d084, 0xa7e4c572, 0xdd72ec39, 0x6198164c,
1076     0x3bbc945e, 0x85f09f78, 0xd870e538, 0x8605988c,
1077     0xb2bf17d1, 0x0b57e4a5, 0x4dd9a1e2, 0xf8c24e61,
1078     0x457b42b3, 0xa5423421, 0xd625089c, 0x663cee1e,
1079     0x52866143, 0xfc93b1c7, 0x2be54ffc, 0x14082404,
1080     0x08a2e351, 0xc72f2599, 0xc4da226d, 0x391a650d,
1081     0x35e979fa, 0x84a369df, 0x9bfca97e, 0xb4481924,
1082     0xd776fe3b, 0x3d4b9aab, 0xd181f0ce, 0x55229911,
1083     0x8903838f, 0x6b9c044e, 0x517366b7, 0x60cbe0eb,
1084     0xcc78c13c, 0xbf1ffd81, 0xfe354094, 0x0cf31cf7,
1085     0x676f18b9, 0x5f268b13, 0x9c58512c, 0xb8bb05d3,
1086     0x5cd38ce7, 0xcbdc396e, 0xf395aac4, 0x0f061b03,
1087     0x13acdc56, 0x49885e44, 0x9efea07f, 0x374f88a9,
1088     0x8254672a, 0x6d6b0abb, 0xe29f87c1, 0x02a6f153,
1089     0x8ba572dc, 0x2716530b, 0xd327019d, 0xc1d82b6c,
1090     0xf562a431, 0xb9e8f374, 0x09f115f6, 0x438c4c46,
1091     0x2645a5ac, 0x970fb589, 0x4428b414, 0x42dfbae1,
1092     0x4e2ca616, 0xd274f73a, 0xd0d20669, 0x2d124109,
1093     0xade0d770, 0x54716fb6, 0xb7bd1ed0, 0x7ec7d6ed,
1094     0xdb85e2cc, 0x57846842, 0xc22d2c98, 0x0e55eda4,
1095     0x88507528, 0x31b8865c, 0x3fed6bf8, 0xa411c286,
1096   },
1097 };
1098
1099 __constant u32 rch[R + 1] =
1100 {
1101   0x00000000,
1102   0x1823c6e8,
1103   0x36a6d2f5,
1104   0x60bc9b8e,
1105   0x1de0d7c2,
1106   0x157737e5,
1107   0x58c9290a,
1108   0xbd5d10f4,
1109   0xe427418b,
1110   0xfbee7c66,
1111   0xca2dbf07,
1112 };
1113
1114 __constant u32 rcl[R + 1] =
1115 {
1116   0x00000000,
1117   0x87b8014f,
1118   0x796f9152,
1119   0xa30c7b35,
1120   0x2e4bfe57,
1121   0x9ff04ada,
1122   0xb1a06b85,
1123   0xcb3e0567,
1124   0xa77d95d8,
1125   0xdd17479e,
1126   0xad5a8333,
1127 };
1128
1129 // this is a highly optimized that assumes dgst[16] = { 0 }; only reuse of no 2nd transform is needed
1130
1131 static void whirlpool_transform (const u32x w[16], u32x dgst[16], __local u32 s_Ch[8][256], __local u32 s_Cl[8][256])
1132 {
1133   u32x Kh[8];
1134   u32x Kl[8];
1135
1136   Kh[0] = 0x300beec0;
1137   Kl[0] = 0xaf902967;
1138   Kh[1] = 0x28282828;
1139   Kl[1] = 0x28282828;
1140   Kh[2] = 0x28282828;
1141   Kl[2] = 0x28282828;
1142   Kh[3] = 0x28282828;
1143   Kl[3] = 0x28282828;
1144   Kh[4] = 0x28282828;
1145   Kl[4] = 0x28282828;
1146   Kh[5] = 0x28282828;
1147   Kl[5] = 0x28282828;
1148   Kh[6] = 0x28282828;
1149   Kl[6] = 0x28282828;
1150   Kh[7] = 0x28282828;
1151   Kl[7] = 0x28282828;
1152
1153   u32x stateh[8];
1154   u32x statel[8];
1155
1156   stateh[0] = w[ 0];
1157   statel[0] = w[ 1];
1158   stateh[1] = w[ 2];
1159   statel[1] = w[ 3];
1160   stateh[2] = w[ 4];
1161   statel[2] = w[ 5];
1162   stateh[3] = w[ 6];
1163   statel[3] = w[ 7];
1164   stateh[4] = w[ 8];
1165   statel[4] = w[ 9];
1166   stateh[5] = w[10];
1167   statel[5] = w[11];
1168   stateh[6] = w[12];
1169   statel[6] = w[13];
1170   stateh[7] = w[14];
1171   statel[7] = w[15];
1172
1173   u32x Lh[8];
1174   u32x Ll[8];
1175
1176   #pragma unroll
1177   for (int i = 0; i < 8; i++)
1178   {
1179     const u32x Lp0 = stateh[(i + 8) & 7] >> 24;
1180     const u32x Lp1 = stateh[(i + 7) & 7] >> 16;
1181     const u32x Lp2 = stateh[(i + 6) & 7] >>  8;
1182     const u32x Lp3 = stateh[(i + 5) & 7] >>  0;
1183     const u32x Lp4 = statel[(i + 4) & 7] >> 24;
1184     const u32x Lp5 = statel[(i + 3) & 7] >> 16;
1185     const u32x Lp6 = statel[(i + 2) & 7] >>  8;
1186     const u32x Lp7 = statel[(i + 1) & 7] >>  0;
1187
1188     Lh[i] = BOX (s_Ch, 0, Lp0 & 0xff)
1189           ^ BOX (s_Ch, 1, Lp1 & 0xff)
1190           ^ BOX (s_Ch, 2, Lp2 & 0xff)
1191           ^ BOX (s_Ch, 3, Lp3 & 0xff)
1192           ^ BOX (s_Ch, 4, Lp4 & 0xff)
1193           ^ BOX (s_Ch, 5, Lp5 & 0xff)
1194           ^ BOX (s_Ch, 6, Lp6 & 0xff)
1195           ^ BOX (s_Ch, 7, Lp7 & 0xff);
1196
1197     Ll[i] = BOX (s_Cl, 0, Lp0 & 0xff)
1198           ^ BOX (s_Cl, 1, Lp1 & 0xff)
1199           ^ BOX (s_Cl, 2, Lp2 & 0xff)
1200           ^ BOX (s_Cl, 3, Lp3 & 0xff)
1201           ^ BOX (s_Cl, 4, Lp4 & 0xff)
1202           ^ BOX (s_Cl, 5, Lp5 & 0xff)
1203           ^ BOX (s_Cl, 6, Lp6 & 0xff)
1204           ^ BOX (s_Cl, 7, Lp7 & 0xff);
1205   }
1206
1207   stateh[0] = Lh[0] ^ Kh[0];
1208   statel[0] = Ll[0] ^ Kl[0];
1209   stateh[1] = Lh[1] ^ Kh[1];
1210   statel[1] = Ll[1] ^ Kl[1];
1211   stateh[2] = Lh[2] ^ Kh[2];
1212   statel[2] = Ll[2] ^ Kl[2];
1213   stateh[3] = Lh[3] ^ Kh[3];
1214   statel[3] = Ll[3] ^ Kl[3];
1215   stateh[4] = Lh[4] ^ Kh[4];
1216   statel[4] = Ll[4] ^ Kl[4];
1217   stateh[5] = Lh[5] ^ Kh[5];
1218   statel[5] = Ll[5] ^ Kl[5];
1219   stateh[6] = Lh[6] ^ Kh[6];
1220   statel[6] = Ll[6] ^ Kl[6];
1221   stateh[7] = Lh[7] ^ Kh[7];
1222   statel[7] = Ll[7] ^ Kl[7];
1223
1224   for (int r = 2; r <= R; r++)
1225   {
1226     u32x Lh[8];
1227     u32x Ll[8];
1228
1229     #pragma unroll
1230     for (int i = 0; i < 8; i++)
1231     {
1232       const u32x Lp0 = Kh[(i + 8) & 7] >> 24;
1233       const u32x Lp1 = Kh[(i + 7) & 7] >> 16;
1234       const u32x Lp2 = Kh[(i + 6) & 7] >>  8;
1235       const u32x Lp3 = Kh[(i + 5) & 7] >>  0;
1236       const u32x Lp4 = Kl[(i + 4) & 7] >> 24;
1237       const u32x Lp5 = Kl[(i + 3) & 7] >> 16;
1238       const u32x Lp6 = Kl[(i + 2) & 7] >>  8;
1239       const u32x Lp7 = Kl[(i + 1) & 7] >>  0;
1240
1241       Lh[i] = BOX (s_Ch, 0, Lp0 & 0xff)
1242             ^ BOX (s_Ch, 1, Lp1 & 0xff)
1243             ^ BOX (s_Ch, 2, Lp2 & 0xff)
1244             ^ BOX (s_Ch, 3, Lp3 & 0xff)
1245             ^ BOX (s_Ch, 4, Lp4 & 0xff)
1246             ^ BOX (s_Ch, 5, Lp5 & 0xff)
1247             ^ BOX (s_Ch, 6, Lp6 & 0xff)
1248             ^ BOX (s_Ch, 7, Lp7 & 0xff);
1249
1250       Ll[i] = BOX (s_Cl, 0, Lp0 & 0xff)
1251             ^ BOX (s_Cl, 1, Lp1 & 0xff)
1252             ^ BOX (s_Cl, 2, Lp2 & 0xff)
1253             ^ BOX (s_Cl, 3, Lp3 & 0xff)
1254             ^ BOX (s_Cl, 4, Lp4 & 0xff)
1255             ^ BOX (s_Cl, 5, Lp5 & 0xff)
1256             ^ BOX (s_Cl, 6, Lp6 & 0xff)
1257             ^ BOX (s_Cl, 7, Lp7 & 0xff);
1258     }
1259
1260     Kh[0] = Lh[0] ^ rch[r];
1261     Kl[0] = Ll[0] ^ rcl[r];
1262     Kh[1] = Lh[1];
1263     Kl[1] = Ll[1];
1264     Kh[2] = Lh[2];
1265     Kl[2] = Ll[2];
1266     Kh[3] = Lh[3];
1267     Kl[3] = Ll[3];
1268     Kh[4] = Lh[4];
1269     Kl[4] = Ll[4];
1270     Kh[5] = Lh[5];
1271     Kl[5] = Ll[5];
1272     Kh[6] = Lh[6];
1273     Kl[6] = Ll[6];
1274     Kh[7] = Lh[7];
1275     Kl[7] = Ll[7];
1276
1277     #pragma unroll 8
1278     for (int i = 0; i < 8; i++)
1279     {
1280       const u32x Lp0 = stateh[(i + 8) & 7] >> 24;
1281       const u32x Lp1 = stateh[(i + 7) & 7] >> 16;
1282       const u32x Lp2 = stateh[(i + 6) & 7] >>  8;
1283       const u32x Lp3 = stateh[(i + 5) & 7] >>  0;
1284       const u32x Lp4 = statel[(i + 4) & 7] >> 24;
1285       const u32x Lp5 = statel[(i + 3) & 7] >> 16;
1286       const u32x Lp6 = statel[(i + 2) & 7] >>  8;
1287       const u32x Lp7 = statel[(i + 1) & 7] >>  0;
1288
1289       Lh[i] = BOX (s_Ch, 0, Lp0 & 0xff)
1290             ^ BOX (s_Ch, 1, Lp1 & 0xff)
1291             ^ BOX (s_Ch, 2, Lp2 & 0xff)
1292             ^ BOX (s_Ch, 3, Lp3 & 0xff)
1293             ^ BOX (s_Ch, 4, Lp4 & 0xff)
1294             ^ BOX (s_Ch, 5, Lp5 & 0xff)
1295             ^ BOX (s_Ch, 6, Lp6 & 0xff)
1296             ^ BOX (s_Ch, 7, Lp7 & 0xff);
1297
1298       Ll[i] = BOX (s_Cl, 0, Lp0 & 0xff)
1299             ^ BOX (s_Cl, 1, Lp1 & 0xff)
1300             ^ BOX (s_Cl, 2, Lp2 & 0xff)
1301             ^ BOX (s_Cl, 3, Lp3 & 0xff)
1302             ^ BOX (s_Cl, 4, Lp4 & 0xff)
1303             ^ BOX (s_Cl, 5, Lp5 & 0xff)
1304             ^ BOX (s_Cl, 6, Lp6 & 0xff)
1305             ^ BOX (s_Cl, 7, Lp7 & 0xff);
1306     }
1307
1308     stateh[0] = Lh[0] ^ Kh[0];
1309     statel[0] = Ll[0] ^ Kl[0];
1310     stateh[1] = Lh[1] ^ Kh[1];
1311     statel[1] = Ll[1] ^ Kl[1];
1312     stateh[2] = Lh[2] ^ Kh[2];
1313     statel[2] = Ll[2] ^ Kl[2];
1314     stateh[3] = Lh[3] ^ Kh[3];
1315     statel[3] = Ll[3] ^ Kl[3];
1316     stateh[4] = Lh[4] ^ Kh[4];
1317     statel[4] = Ll[4] ^ Kl[4];
1318     stateh[5] = Lh[5] ^ Kh[5];
1319     statel[5] = Ll[5] ^ Kl[5];
1320     stateh[6] = Lh[6] ^ Kh[6];
1321     statel[6] = Ll[6] ^ Kl[6];
1322     stateh[7] = Lh[7] ^ Kh[7];
1323     statel[7] = Ll[7] ^ Kl[7];
1324   }
1325
1326   dgst[ 0] = stateh[0] ^ w[ 0];
1327   dgst[ 1] = statel[0] ^ w[ 1];
1328   dgst[ 2] = stateh[1] ^ w[ 2];
1329   dgst[ 3] = statel[1] ^ w[ 3];
1330   dgst[ 4] = stateh[2] ^ w[ 4];
1331   dgst[ 5] = statel[2] ^ w[ 5];
1332   dgst[ 6] = stateh[3] ^ w[ 6];
1333   dgst[ 7] = statel[3] ^ w[ 7];
1334   dgst[ 8] = stateh[4] ^ w[ 8];
1335   dgst[ 9] = statel[4] ^ w[ 9];
1336   dgst[10] = stateh[5] ^ w[10];
1337   dgst[11] = statel[5] ^ w[11];
1338   dgst[12] = stateh[6] ^ w[12];
1339   dgst[13] = statel[6] ^ w[13];
1340   dgst[14] = stateh[7] ^ w[14];
1341   dgst[15] = statel[7] ^ w[15];
1342 }
1343
1344 static void m06100m (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len, __global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, __local u32 s_Cl[8][256], __local u32 s_Ch[8][256])
1345 {
1346   /**
1347    * modifier
1348    */
1349
1350   const u32 gid = get_global_id (0);
1351   const u32 lid = get_local_id (0);
1352
1353   /**
1354    * loop
1355    */
1356
1357   u32 w0l = w0[0];
1358
1359   for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos += VECT_SIZE)
1360   {
1361     const u32x w0r = w0r_create_bft (bfs_buf, il_pos);
1362
1363     const u32x w0lr = w0l | w0r;
1364
1365     u32x wl[16];
1366
1367     wl[ 0] = w0lr;
1368     wl[ 1] = w0[1];
1369     wl[ 2] = w0[2];
1370     wl[ 3] = w0[3];
1371     wl[ 4] = w1[0];
1372     wl[ 5] = w1[1];
1373     wl[ 6] = w1[2];
1374     wl[ 7] = w1[3];
1375     wl[ 8] = w2[0];
1376     wl[ 9] = w2[1];
1377     wl[10] = w2[2];
1378     wl[11] = w2[3];
1379     wl[12] = w3[0];
1380     wl[13] = w3[1];
1381     wl[14] = 0;
1382     wl[15] = pw_len * 8;
1383
1384     u32x dgst[16];
1385
1386     whirlpool_transform (wl, dgst, s_Ch, s_Cl);
1387
1388     COMPARE_M_SIMD (dgst[0], dgst[1], dgst[2], dgst[3]);
1389   }
1390 }
1391
1392 static void m06100s (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len, __global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, __local u32 s_Cl[8][256], __local u32 s_Ch[8][256])
1393 {
1394   /**
1395    * modifier
1396    */
1397
1398   const u32 gid = get_global_id (0);
1399   const u32 lid = get_local_id (0);
1400
1401   /**
1402    * digest
1403    */
1404
1405   const u32 search[4] =
1406   {
1407     digests_buf[digests_offset].digest_buf[DGST_R0],
1408     digests_buf[digests_offset].digest_buf[DGST_R1],
1409     digests_buf[digests_offset].digest_buf[DGST_R2],
1410     digests_buf[digests_offset].digest_buf[DGST_R3]
1411   };
1412
1413   /**
1414    * loop
1415    */
1416
1417   u32 w0l = w0[0];
1418
1419   for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos += VECT_SIZE)
1420   {
1421     const u32x w0r = w0r_create_bft (bfs_buf, il_pos);
1422
1423     const u32x w0lr = w0l | w0r;
1424
1425     u32x wl[16];
1426
1427     wl[ 0] = w0lr;
1428     wl[ 1] = w0[1];
1429     wl[ 2] = w0[2];
1430     wl[ 3] = w0[3];
1431     wl[ 4] = w1[0];
1432     wl[ 5] = w1[1];
1433     wl[ 6] = w1[2];
1434     wl[ 7] = w1[3];
1435     wl[ 8] = w2[0];
1436     wl[ 9] = w2[1];
1437     wl[10] = w2[2];
1438     wl[11] = w2[3];
1439     wl[12] = w3[0];
1440     wl[13] = w3[1];
1441     wl[14] = 0;
1442     wl[15] = pw_len * 8;
1443
1444     u32x dgst[16];
1445
1446     whirlpool_transform (wl, dgst, s_Ch, s_Cl);
1447
1448     COMPARE_S_SIMD (dgst[0], dgst[1], dgst[2], dgst[3]);
1449   }
1450 }
1451
1452 __kernel void m06100_m04 (__global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
1453 {
1454   /**
1455    * modifier
1456    */
1457
1458   const u32 gid = get_global_id (0);
1459   const u32 lid = get_local_id (0);
1460   const u32 lsz = get_local_size (0);
1461
1462   /**
1463    * shared
1464    */
1465
1466   __local u32 s_Ch[8][256];
1467   __local u32 s_Cl[8][256];
1468
1469   for (u32 i = lid; i < 256; i += lsz)
1470   {
1471     s_Ch[0][i] = Ch[0][i];
1472     s_Ch[1][i] = Ch[1][i];
1473     s_Ch[2][i] = Ch[2][i];
1474     s_Ch[3][i] = Ch[3][i];
1475     s_Ch[4][i] = Ch[4][i];
1476     s_Ch[5][i] = Ch[5][i];
1477     s_Ch[6][i] = Ch[6][i];
1478     s_Ch[7][i] = Ch[7][i];
1479
1480     s_Cl[0][i] = Cl[0][i];
1481     s_Cl[1][i] = Cl[1][i];
1482     s_Cl[2][i] = Cl[2][i];
1483     s_Cl[3][i] = Cl[3][i];
1484     s_Cl[4][i] = Cl[4][i];
1485     s_Cl[5][i] = Cl[5][i];
1486     s_Cl[6][i] = Cl[6][i];
1487     s_Cl[7][i] = Cl[7][i];
1488   }
1489
1490   barrier (CLK_LOCAL_MEM_FENCE);
1491
1492   if (gid >= gid_max) return;
1493
1494   /**
1495    * base
1496    */
1497
1498   u32 w0[4];
1499
1500   w0[0] = pws[gid].i[ 0];
1501   w0[1] = pws[gid].i[ 1];
1502   w0[2] = pws[gid].i[ 2];
1503   w0[3] = pws[gid].i[ 3];
1504
1505   u32 w1[4];
1506
1507   w1[0] = 0;
1508   w1[1] = 0;
1509   w1[2] = 0;
1510   w1[3] = 0;
1511
1512   u32 w2[4];
1513
1514   w2[0] = 0;
1515   w2[1] = 0;
1516   w2[2] = 0;
1517   w2[3] = 0;
1518
1519   u32 w3[4];
1520
1521   w3[0] = 0;
1522   w3[1] = 0;
1523   w3[2] = 0;
1524   w3[3] = 0;
1525
1526   const u32 pw_len = pws[gid].pw_len;
1527
1528   /**
1529    * main
1530    */
1531
1532   m06100m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, s_Cl, s_Ch);
1533 }
1534
1535 __kernel void m06100_m08 (__global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
1536 {
1537   /**
1538    * modifier
1539    */
1540
1541   const u32 gid = get_global_id (0);
1542   const u32 lid = get_local_id (0);
1543   const u32 lsz = get_local_size (0);
1544
1545   /**
1546    * shared
1547    */
1548
1549   __local u32 s_Ch[8][256];
1550   __local u32 s_Cl[8][256];
1551
1552   for (u32 i = lid; i < 256; i += lsz)
1553   {
1554     s_Ch[0][i] = Ch[0][i];
1555     s_Ch[1][i] = Ch[1][i];
1556     s_Ch[2][i] = Ch[2][i];
1557     s_Ch[3][i] = Ch[3][i];
1558     s_Ch[4][i] = Ch[4][i];
1559     s_Ch[5][i] = Ch[5][i];
1560     s_Ch[6][i] = Ch[6][i];
1561     s_Ch[7][i] = Ch[7][i];
1562
1563     s_Cl[0][i] = Cl[0][i];
1564     s_Cl[1][i] = Cl[1][i];
1565     s_Cl[2][i] = Cl[2][i];
1566     s_Cl[3][i] = Cl[3][i];
1567     s_Cl[4][i] = Cl[4][i];
1568     s_Cl[5][i] = Cl[5][i];
1569     s_Cl[6][i] = Cl[6][i];
1570     s_Cl[7][i] = Cl[7][i];
1571   }
1572
1573   barrier (CLK_LOCAL_MEM_FENCE);
1574
1575   if (gid >= gid_max) return;
1576
1577   /**
1578    * base
1579    */
1580
1581   u32 w0[4];
1582
1583   w0[0] = pws[gid].i[ 0];
1584   w0[1] = pws[gid].i[ 1];
1585   w0[2] = pws[gid].i[ 2];
1586   w0[3] = pws[gid].i[ 3];
1587
1588   u32 w1[4];
1589
1590   w1[0] = pws[gid].i[ 4];
1591   w1[1] = pws[gid].i[ 5];
1592   w1[2] = pws[gid].i[ 6];
1593   w1[3] = pws[gid].i[ 7];
1594
1595   u32 w2[4];
1596
1597   w2[0] = 0;
1598   w2[1] = 0;
1599   w2[2] = 0;
1600   w2[3] = 0;
1601
1602   u32 w3[4];
1603
1604   w3[0] = 0;
1605   w3[1] = 0;
1606   w3[2] = 0;
1607   w3[3] = 0;
1608
1609   const u32 pw_len = pws[gid].pw_len;
1610
1611   /**
1612    * main
1613    */
1614
1615   m06100m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, s_Cl, s_Ch);
1616 }
1617
1618 __kernel void m06100_m16 (__global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
1619 {
1620   /**
1621    * modifier
1622    */
1623
1624   const u32 gid = get_global_id (0);
1625   const u32 lid = get_local_id (0);
1626   const u32 lsz = get_local_size (0);
1627
1628   /**
1629    * shared
1630    */
1631
1632   __local u32 s_Ch[8][256];
1633   __local u32 s_Cl[8][256];
1634
1635   for (u32 i = lid; i < 256; i += lsz)
1636   {
1637     s_Ch[0][i] = Ch[0][i];
1638     s_Ch[1][i] = Ch[1][i];
1639     s_Ch[2][i] = Ch[2][i];
1640     s_Ch[3][i] = Ch[3][i];
1641     s_Ch[4][i] = Ch[4][i];
1642     s_Ch[5][i] = Ch[5][i];
1643     s_Ch[6][i] = Ch[6][i];
1644     s_Ch[7][i] = Ch[7][i];
1645
1646     s_Cl[0][i] = Cl[0][i];
1647     s_Cl[1][i] = Cl[1][i];
1648     s_Cl[2][i] = Cl[2][i];
1649     s_Cl[3][i] = Cl[3][i];
1650     s_Cl[4][i] = Cl[4][i];
1651     s_Cl[5][i] = Cl[5][i];
1652     s_Cl[6][i] = Cl[6][i];
1653     s_Cl[7][i] = Cl[7][i];
1654   }
1655
1656   barrier (CLK_LOCAL_MEM_FENCE);
1657
1658   if (gid >= gid_max) return;
1659
1660   /**
1661    * base
1662    */
1663
1664   u32 w0[4];
1665
1666   w0[0] = pws[gid].i[ 0];
1667   w0[1] = pws[gid].i[ 1];
1668   w0[2] = pws[gid].i[ 2];
1669   w0[3] = pws[gid].i[ 3];
1670
1671   u32 w1[4];
1672
1673   w1[0] = pws[gid].i[ 4];
1674   w1[1] = pws[gid].i[ 5];
1675   w1[2] = pws[gid].i[ 6];
1676   w1[3] = pws[gid].i[ 7];
1677
1678   u32 w2[4];
1679
1680   w2[0] = pws[gid].i[ 8];
1681   w2[1] = pws[gid].i[ 9];
1682   w2[2] = pws[gid].i[10];
1683   w2[3] = pws[gid].i[11];
1684
1685   u32 w3[4];
1686
1687   w3[0] = pws[gid].i[12];
1688   w3[1] = pws[gid].i[13];
1689   w3[2] = 0;
1690   w3[3] = 0;
1691
1692   const u32 pw_len = pws[gid].pw_len;
1693
1694   /**
1695    * main
1696    */
1697
1698   m06100m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, s_Cl, s_Ch);
1699 }
1700
1701 __kernel void m06100_s04 (__global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
1702 {
1703   /**
1704    * modifier
1705    */
1706
1707   const u32 gid = get_global_id (0);
1708   const u32 lid = get_local_id (0);
1709   const u32 lsz = get_local_size (0);
1710
1711   /**
1712    * shared
1713    */
1714
1715   __local u32 s_Ch[8][256];
1716   __local u32 s_Cl[8][256];
1717
1718   for (u32 i = lid; i < 256; i += lsz)
1719   {
1720     s_Ch[0][i] = Ch[0][i];
1721     s_Ch[1][i] = Ch[1][i];
1722     s_Ch[2][i] = Ch[2][i];
1723     s_Ch[3][i] = Ch[3][i];
1724     s_Ch[4][i] = Ch[4][i];
1725     s_Ch[5][i] = Ch[5][i];
1726     s_Ch[6][i] = Ch[6][i];
1727     s_Ch[7][i] = Ch[7][i];
1728
1729     s_Cl[0][i] = Cl[0][i];
1730     s_Cl[1][i] = Cl[1][i];
1731     s_Cl[2][i] = Cl[2][i];
1732     s_Cl[3][i] = Cl[3][i];
1733     s_Cl[4][i] = Cl[4][i];
1734     s_Cl[5][i] = Cl[5][i];
1735     s_Cl[6][i] = Cl[6][i];
1736     s_Cl[7][i] = Cl[7][i];
1737   }
1738
1739   barrier (CLK_LOCAL_MEM_FENCE);
1740
1741   if (gid >= gid_max) return;
1742
1743   /**
1744    * base
1745    */
1746
1747   u32 w0[4];
1748
1749   w0[0] = pws[gid].i[ 0];
1750   w0[1] = pws[gid].i[ 1];
1751   w0[2] = pws[gid].i[ 2];
1752   w0[3] = pws[gid].i[ 3];
1753
1754   u32 w1[4];
1755
1756   w1[0] = 0;
1757   w1[1] = 0;
1758   w1[2] = 0;
1759   w1[3] = 0;
1760
1761   u32 w2[4];
1762
1763   w2[0] = 0;
1764   w2[1] = 0;
1765   w2[2] = 0;
1766   w2[3] = 0;
1767
1768   u32 w3[4];
1769
1770   w3[0] = 0;
1771   w3[1] = 0;
1772   w3[2] = 0;
1773   w3[3] = 0;
1774
1775   const u32 pw_len = pws[gid].pw_len;
1776
1777   /**
1778    * main
1779    */
1780
1781   m06100s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, s_Cl, s_Ch);
1782 }
1783
1784 __kernel void m06100_s08 (__global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
1785 {
1786   /**
1787    * modifier
1788    */
1789
1790   const u32 gid = get_global_id (0);
1791   const u32 lid = get_local_id (0);
1792   const u32 lsz = get_local_size (0);
1793
1794   /**
1795    * shared
1796    */
1797
1798   __local u32 s_Ch[8][256];
1799   __local u32 s_Cl[8][256];
1800
1801   for (u32 i = lid; i < 256; i += lsz)
1802   {
1803     s_Ch[0][i] = Ch[0][i];
1804     s_Ch[1][i] = Ch[1][i];
1805     s_Ch[2][i] = Ch[2][i];
1806     s_Ch[3][i] = Ch[3][i];
1807     s_Ch[4][i] = Ch[4][i];
1808     s_Ch[5][i] = Ch[5][i];
1809     s_Ch[6][i] = Ch[6][i];
1810     s_Ch[7][i] = Ch[7][i];
1811
1812     s_Cl[0][i] = Cl[0][i];
1813     s_Cl[1][i] = Cl[1][i];
1814     s_Cl[2][i] = Cl[2][i];
1815     s_Cl[3][i] = Cl[3][i];
1816     s_Cl[4][i] = Cl[4][i];
1817     s_Cl[5][i] = Cl[5][i];
1818     s_Cl[6][i] = Cl[6][i];
1819     s_Cl[7][i] = Cl[7][i];
1820   }
1821
1822   barrier (CLK_LOCAL_MEM_FENCE);
1823
1824   if (gid >= gid_max) return;
1825
1826   /**
1827    * base
1828    */
1829
1830   u32 w0[4];
1831
1832   w0[0] = pws[gid].i[ 0];
1833   w0[1] = pws[gid].i[ 1];
1834   w0[2] = pws[gid].i[ 2];
1835   w0[3] = pws[gid].i[ 3];
1836
1837   u32 w1[4];
1838
1839   w1[0] = pws[gid].i[ 4];
1840   w1[1] = pws[gid].i[ 5];
1841   w1[2] = pws[gid].i[ 6];
1842   w1[3] = pws[gid].i[ 7];
1843
1844   u32 w2[4];
1845
1846   w2[0] = 0;
1847   w2[1] = 0;
1848   w2[2] = 0;
1849   w2[3] = 0;
1850
1851   u32 w3[4];
1852
1853   w3[0] = 0;
1854   w3[1] = 0;
1855   w3[2] = 0;
1856   w3[3] = 0;
1857
1858   const u32 pw_len = pws[gid].pw_len;
1859
1860   /**
1861    * main
1862    */
1863
1864   m06100s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, s_Cl, s_Ch);
1865 }
1866
1867 __kernel void m06100_s16 (__global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
1868 {
1869   /**
1870    * modifier
1871    */
1872
1873   const u32 gid = get_global_id (0);
1874   const u32 lid = get_local_id (0);
1875   const u32 lsz = get_local_size (0);
1876
1877   /**
1878    * shared
1879    */
1880
1881   __local u32 s_Ch[8][256];
1882   __local u32 s_Cl[8][256];
1883
1884   for (u32 i = lid; i < 256; i += lsz)
1885   {
1886     s_Ch[0][i] = Ch[0][i];
1887     s_Ch[1][i] = Ch[1][i];
1888     s_Ch[2][i] = Ch[2][i];
1889     s_Ch[3][i] = Ch[3][i];
1890     s_Ch[4][i] = Ch[4][i];
1891     s_Ch[5][i] = Ch[5][i];
1892     s_Ch[6][i] = Ch[6][i];
1893     s_Ch[7][i] = Ch[7][i];
1894
1895     s_Cl[0][i] = Cl[0][i];
1896     s_Cl[1][i] = Cl[1][i];
1897     s_Cl[2][i] = Cl[2][i];
1898     s_Cl[3][i] = Cl[3][i];
1899     s_Cl[4][i] = Cl[4][i];
1900     s_Cl[5][i] = Cl[5][i];
1901     s_Cl[6][i] = Cl[6][i];
1902     s_Cl[7][i] = Cl[7][i];
1903   }
1904
1905   barrier (CLK_LOCAL_MEM_FENCE);
1906
1907   if (gid >= gid_max) return;
1908
1909   /**
1910    * base
1911    */
1912
1913   u32 w0[4];
1914
1915   w0[0] = pws[gid].i[ 0];
1916   w0[1] = pws[gid].i[ 1];
1917   w0[2] = pws[gid].i[ 2];
1918   w0[3] = pws[gid].i[ 3];
1919
1920   u32 w1[4];
1921
1922   w1[0] = pws[gid].i[ 4];
1923   w1[1] = pws[gid].i[ 5];
1924   w1[2] = pws[gid].i[ 6];
1925   w1[3] = pws[gid].i[ 7];
1926
1927   u32 w2[4];
1928
1929   w2[0] = pws[gid].i[ 8];
1930   w2[1] = pws[gid].i[ 9];
1931   w2[2] = pws[gid].i[10];
1932   w2[3] = pws[gid].i[11];
1933
1934   u32 w3[4];
1935
1936   w3[0] = pws[gid].i[12];
1937   w3[1] = pws[gid].i[13];
1938   w3[2] = 0;
1939   w3[3] = 0;
1940
1941   const u32 pw_len = pws[gid].pw_len;
1942
1943   /**
1944    * main
1945    */
1946
1947   m06100s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, s_Cl, s_Ch);
1948 }