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