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