source: trunk/CrypPlugins/MD5Collider/Algorithm/KlimaTunnelsCollider.cs @ 1430

Last change on this file since 1430 was 1430, checked in by pretzsch, 12 years ago

MD5Collider: Added comments

File size: 131.2 KB
Line 
1/*
2 * This class is based of Vlastimil Klima's implementation of his
3 * tunneling technique. It is a port of the source code provided
4 * by him as "source code version 1".
5 */
6
7using System;
8using System.Collections.Generic;
9using System.Linq;
10using System.Text;
11using System.Security.Cryptography;
12
13namespace Cryptool.Plugins.MD5Collider.Algorithm
14{
15    /// <summary>
16    /// A port of Vlastimil Klima's reference implementation of his tunneling technique
17    /// </summary>
18    class KlimaTunnelsCollider : MD5ColliderBase
19    {
20        /// <summary>
21        /// Initializes RNG and start search for first block
22        /// </summary>
23        protected override void PerformFindCollision()
24        {
25            IsStopped = false;
26
27            byte[] seedBytedMd5 = MD5.Create().ComputeHash(RandomSeed);
28            int seed = BitConverter.ToInt32(seedBytedMd5, 0) ^ BitConverter.ToInt32(seedBytedMd5, 4) ^ BitConverter.ToInt32(seedBytedMd5, 8) ^ BitConverter.ToInt32(seedBytedMd5, 12);
29            Random rngInitializer = new Random(seed);
30
31            X = (rngInitializer.Next(int.MaxValue) << 16) | rngInitializer.Next(int.MaxValue);
32            Y = 0x00000001;
33
34            B1();
35        }
36
37        UInt32 a, b, c, d;
38        UInt32[] Hx = new UInt32[16];
39        UInt32[] P_IHV1 = new UInt32[4], P_HIHV1 = new UInt32[4];
40        //UInt32 pocet_kolizi;
41        byte[] buffer = new byte[2048];
42        double cas1 = 0, cas2 = 0, cas3 = 0, cas4 = 0, cas5 = 0;
43
44        byte[] v1 = new byte[128], v2 = new byte[128], hash1 = new byte[16], hash2 = new byte[16];
45
46        UInt32[] longmask = new UInt32[33] 
47            {0x0,
48            0x00000001,0x00000002,0x00000004,0x00000008,0x00000010,0x00000020,0x00000040,0x00000080,
49            0x00000100,0x00000200,0x00000400,0x00000800,0x00001000,0x00002000,0x00004000,0x00008000,
50            0x00010000,0x00020000,0x00040000,0x00080000,0x00100000,0x00200000,0x00400000,0x00800000,
51            0x01000000,0x02000000,0x04000000,0x08000000,0x10000000,0x20000000,0x40000000,0x80000000};
52
53        bool IsStopped = false;
54
55        void MD5Test(byte[] data, int datalen, byte[] output)
56        {
57            MD5 md5 = MD5.Create();
58            byte[] res = md5.ComputeHash(data, 0, datalen);
59            Array.Copy(res, output, 16);
60        }
61
62        int X, Y;
63        UInt32 rng()
64        {
65            if ((X & 0x80000000) != 0) X = ((X ^ 0x00000057) << 1) | 0x00000001;
66            else X = X << 1;
67
68            Y = 1664525 * Y + 1013904223;
69            return (UInt32)(X + Y);
70        }
71
72        const int S11 = 7;
73        const int S12 = 12;
74        const int S13 = 17;
75        const int S14 = 22;
76        const int S21 = 5;
77        const int S22 = 9;
78        const int S23 = 14;
79        const int S24 = 20;
80        const int S31 = 4;
81        const int S32 = 11;
82        const int S33 = 16;
83        const int S34 = 23;
84        const int S41 = 6;
85        const int S42 = 10;
86        const int S43 = 15;
87        const int S44 = 21;
88
89        const int bitZero = 0;
90        const int bitOne = 1;
91
92        UInt32 F(UInt32 x, UInt32 y, UInt32 z)
93        {
94            return (((x) & (y)) | ((~x) & (z)));
95        }
96
97        UInt32 G(UInt32 x, UInt32 y, UInt32 z)
98        {
99            return (((x) & (z)) | ((y) & (~z)));
100        }
101
102        UInt32 H(UInt32 x, UInt32 y, UInt32 z)
103        {
104            return ((x) ^ (y) ^ (z));
105        }
106
107        UInt32 I(UInt32 x, UInt32 y, UInt32 z)
108        {
109            return ((y) ^ ((x) | (~z)));
110        }
111
112        UInt32 RL(UInt32 x, int n)
113        {
114            return (((x) << (n)) | ((x) >> (32 - (n))));
115        }
116
117        UInt32 RR(UInt32 x, int n)
118        {
119            return (((x) >> (n)) | ((x) << (32 - (n))));
120        }
121
122        void FFx(ref UInt32 a, UInt32 b, UInt32 c, UInt32 d, UInt32 x, int s, UInt32 ac)
123        {
124            (a) = F((b), (c), (d)) + (a) + (x) + (UInt32)(ac);
125            (a) = RL((a), (s));
126            (a) += (b);
127        }
128
129        void GGx(ref UInt32 a, UInt32 b, UInt32 c, UInt32 d, UInt32 x, int s, UInt32 ac)
130        {
131            (a) = G((b), (c), (d)) + (a) + (x) + (UInt32)(ac);
132            (a) = RL((a), (s));
133            (a) += (b);
134        }
135
136        void HHx(ref UInt32 a, UInt32 b, UInt32 c, UInt32 d, UInt32 x, int s, UInt32 ac)
137        {
138            (a) = H((b), (c), (d)) + (a) + (x) + (UInt32)(ac);
139            (a) = RL((a), (s));
140            (a) += (b);
141        }
142
143        void IIx(ref UInt32 a, UInt32 b, UInt32 c, UInt32 d, UInt32 x, int s, UInt32 ac)
144        {
145            (a) = I((b), (c), (d)) + (a) + (x) + (UInt32)(ac);
146            (a) = RL((a), (s));
147            (a) += (b);
148        }
149        void HMD5Tr()
150        {
151            FFx(ref a, b, c, d, Hx[0], S11, 0xd76aa478); /* 1 */
152            FFx(ref d, a, b, c, Hx[1], S12, 0xe8c7b756); /* 2 */
153            FFx(ref c, d, a, b, Hx[2], S13, 0x242070db); /* 3 */
154            FFx(ref b, c, d, a, Hx[3], S14, 0xc1bdceee); /* 4 */
155            FFx(ref a, b, c, d, Hx[4], S11, 0xf57c0faf); /* 5 */
156            FFx(ref d, a, b, c, Hx[5], S12, 0x4787c62a); /* 6 */
157            FFx(ref c, d, a, b, Hx[6], S13, 0xa8304613); /* 7 */
158            FFx(ref b, c, d, a, Hx[7], S14, 0xfd469501); /* 8 */
159            FFx(ref a, b, c, d, Hx[8], S11, 0x698098d8); /* 9 */
160            FFx(ref d, a, b, c, Hx[9], S12, 0x8b44f7af); /* 10 */
161            FFx(ref c, d, a, b, Hx[10], S13, 0xffff5bb1); /* 11 */
162            FFx(ref b, c, d, a, Hx[11], S14, 0x895cd7be); /* 12 */
163            FFx(ref a, b, c, d, Hx[12], S11, 0x6b901122); /* 13 */
164            FFx(ref d, a, b, c, Hx[13], S12, 0xfd987193); /* 14 */
165            FFx(ref c, d, a, b, Hx[14], S13, 0xa679438e); /* 15 */
166            FFx(ref b, c, d, a, Hx[15], S14, 0x49b40821); /* 16 */
167
168            GGx(ref a, b, c, d, Hx[1], S21, 0xf61e2562); /* 17 */
169            GGx(ref d, a, b, c, Hx[6], S22, 0xc040b340); /* 18 */
170            GGx(ref c, d, a, b, Hx[11], S23, 0x265e5a51); /* 19 */
171            GGx(ref b, c, d, a, Hx[0], S24, 0xe9b6c7aa); /* 20 */
172            GGx(ref a, b, c, d, Hx[5], S21, 0xd62f105d); /* 21 */
173            GGx(ref d, a, b, c, Hx[10], S22, 0x2441453); /* 22 */
174            GGx(ref c, d, a, b, Hx[15], S23, 0xd8a1e681); /* 23 */
175            GGx(ref b, c, d, a, Hx[4], S24, 0xe7d3fbc8); /* 24 */
176            GGx(ref a, b, c, d, Hx[9], S21, 0x21e1cde6); /* 25 */
177            GGx(ref d, a, b, c, Hx[14], S22, 0xc33707d6); /* 26 */
178            GGx(ref c, d, a, b, Hx[3], S23, 0xf4d50d87); /* 27 */
179            GGx(ref b, c, d, a, Hx[8], S24, 0x455a14ed); /* 28 */
180            GGx(ref a, b, c, d, Hx[13], S21, 0xa9e3e905); /* 29 */
181            GGx(ref d, a, b, c, Hx[2], S22, 0xfcefa3f8); /* 30 */
182            GGx(ref c, d, a, b, Hx[7], S23, 0x676f02d9); /* 31 */
183            GGx(ref b, c, d, a, Hx[12], S24, 0x8d2a4c8a); /* 32 */
184
185            HHx(ref a, b, c, d, Hx[5], S31, 0xfffa3942); /* 33 */
186            HHx(ref d, a, b, c, Hx[8], S32, 0x8771f681); /* 34 */
187            HHx(ref c, d, a, b, Hx[11], S33, 0x6d9d6122); /* 35 */
188            HHx(ref b, c, d, a, Hx[14], S34, 0xfde5380c); /* 36 */
189            HHx(ref a, b, c, d, Hx[1], S31, 0xa4beea44); /* 37 */
190            HHx(ref d, a, b, c, Hx[4], S32, 0x4bdecfa9); /* 38 */
191            HHx(ref c, d, a, b, Hx[7], S33, 0xf6bb4b60); /* 39 */
192            HHx(ref b, c, d, a, Hx[10], S34, 0xbebfbc70); /* 40 */
193            HHx(ref a, b, c, d, Hx[13], S31, 0x289b7ec6); /* 41 */
194            HHx(ref d, a, b, c, Hx[0], S32, 0xeaa127fa); /* 42 */
195            HHx(ref c, d, a, b, Hx[3], S33, 0xd4ef3085); /* 43 */
196            HHx(ref b, c, d, a, Hx[6], S34, 0x4881d05); /* 44 */
197            HHx(ref a, b, c, d, Hx[9], S31, 0xd9d4d039); /* 45 */
198            HHx(ref d, a, b, c, Hx[12], S32, 0xe6db99e5); /* 46 */
199            HHx(ref c, d, a, b, Hx[15], S33, 0x1fa27cf8); /* 47 */
200            HHx(ref b, c, d, a, Hx[2], S34, 0xc4ac5665); /* 48 */
201
202            IIx(ref a, b, c, d, Hx[0], S41, 0xf4292244); /* 49 */
203            IIx(ref d, a, b, c, Hx[7], S42, 0x432aff97); /* 50 */
204            IIx(ref c, d, a, b, Hx[14], S43, 0xab9423a7); /* 51 */
205            IIx(ref b, c, d, a, Hx[5], S44, 0xfc93a039); /* 52 */
206            IIx(ref a, b, c, d, Hx[12], S41, 0x655b59c3); /* 53 */
207            IIx(ref d, a, b, c, Hx[3], S42, 0x8f0ccc92); /* 54 */
208            IIx(ref c, d, a, b, Hx[10], S43, 0xffeff47d); /* 55 */
209            IIx(ref b, c, d, a, Hx[1], S44, 0x85845dd1); /* 56 */
210            IIx(ref a, b, c, d, Hx[8], S41, 0x6fa87e4f); /* 57 */
211            IIx(ref d, a, b, c, Hx[15], S42, 0xfe2ce6e0); /* 58 */
212            IIx(ref c, d, a, b, Hx[6], S43, 0xa3014314); /* 59 */
213            IIx(ref b, c, d, a, Hx[13], S44, 0x4e0811a1); /* 60 */
214            IIx(ref a, b, c, d, Hx[4], S41, 0xf7537e82); /* 61 */
215            IIx(ref d, a, b, c, Hx[11], S42, 0xbd3af235); /* 62 */
216            IIx(ref c, d, a, b, Hx[2], S43, 0x2ad7d2bb); /* 63 */
217            IIx(ref b, c, d, a, Hx[9], S44, 0xeb86d391); /* 64 */
218        }
219        /*=========================================================*/
220        UInt32 hex_to_long(String buff)
221        {
222            return UInt32.Parse(buff, System.Globalization.NumberStyles.HexNumber);
223        }
224
225
226        UInt32[] mask2Q9 = new UInt32[256] 
227            {
228            0x00000000,0x00000004,0x00000008,0x0000000C,0x00000010,0x00000014,0x00000018,0x0000001C,
229            0x00000400,0x00000404,0x00000408,0x0000040C,0x00000410,0x00000414,0x00000418,0x0000041C,
230            0x00040000,0x00040004,0x00040008,0x0004000C,0x00040010,0x00040014,0x00040018,0x0004001C,
231            0x00040400,0x00040404,0x00040408,0x0004040C,0x00040410,0x00040414,0x00040418,0x0004041C,
232            0x00100000,0x00100004,0x00100008,0x0010000C,0x00100010,0x00100014,0x00100018,0x0010001C,
233            0x00100400,0x00100404,0x00100408,0x0010040C,0x00100410,0x00100414,0x00100418,0x0010041C,
234            0x00140000,0x00140004,0x00140008,0x0014000C,0x00140010,0x00140014,0x00140018,0x0014001C,
235            0x00140400,0x00140404,0x00140408,0x0014040C,0x00140410,0x00140414,0x00140418,0x0014041C,
236            0x00200000,0x00200004,0x00200008,0x0020000C,0x00200010,0x00200014,0x00200018,0x0020001C,
237            0x00200400,0x00200404,0x00200408,0x0020040C,0x00200410,0x00200414,0x00200418,0x0020041C,
238            0x00240000,0x00240004,0x00240008,0x0024000C,0x00240010,0x00240014,0x00240018,0x0024001C,
239            0x00240400,0x00240404,0x00240408,0x0024040C,0x00240410,0x00240414,0x00240418,0x0024041C,
240            0x00300000,0x00300004,0x00300008,0x0030000C,0x00300010,0x00300014,0x00300018,0x0030001C,
241            0x00300400,0x00300404,0x00300408,0x0030040C,0x00300410,0x00300414,0x00300418,0x0030041C,
242            0x00340000,0x00340004,0x00340008,0x0034000C,0x00340010,0x00340014,0x00340018,0x0034001C,
243            0x00340400,0x00340404,0x00340408,0x0034040C,0x00340410,0x00340414,0x00340418,0x0034041C,
244            0x00400000,0x00400004,0x00400008,0x0040000C,0x00400010,0x00400014,0x00400018,0x0040001C,
245            0x00400400,0x00400404,0x00400408,0x0040040C,0x00400410,0x00400414,0x00400418,0x0040041C,
246            0x00440000,0x00440004,0x00440008,0x0044000C,0x00440010,0x00440014,0x00440018,0x0044001C,
247            0x00440400,0x00440404,0x00440408,0x0044040C,0x00440410,0x00440414,0x00440418,0x0044041C,
248            0x00500000,0x00500004,0x00500008,0x0050000C,0x00500010,0x00500014,0x00500018,0x0050001C,
249            0x00500400,0x00500404,0x00500408,0x0050040C,0x00500410,0x00500414,0x00500418,0x0050041C,
250            0x00540000,0x00540004,0x00540008,0x0054000C,0x00540010,0x00540014,0x00540018,0x0054001C,
251            0x00540400,0x00540404,0x00540408,0x0054040C,0x00540410,0x00540414,0x00540418,0x0054041C,
252            0x00600000,0x00600004,0x00600008,0x0060000C,0x00600010,0x00600014,0x00600018,0x0060001C,
253            0x00600400,0x00600404,0x00600408,0x0060040C,0x00600410,0x00600414,0x00600418,0x0060041C,
254            0x00640000,0x00640004,0x00640008,0x0064000C,0x00640010,0x00640014,0x00640018,0x0064001C,
255            0x00640400,0x00640404,0x00640408,0x0064040C,0x00640410,0x00640414,0x00640418,0x0064041C,
256            0x00700000,0x00700004,0x00700008,0x0070000C,0x00700010,0x00700014,0x00700018,0x0070001C,
257            0x00700400,0x00700404,0x00700408,0x0070040C,0x00700410,0x00700414,0x00700418,0x0070041C,
258            0x00740000,0x00740004,0x00740008,0x0074000C,0x00740010,0x00740014,0x00740018,0x0074001C,
259            0x00740400,0x00740404,0x00740408,0x0074040C,0x00740410,0x00740414,0x00740418,0x0074041C
260            };
261
262        /*=========================================================*/
263        int B1()
264        {
265            int i;
266
267            MatchProgressMax = 8;
268
269            UInt32[] Q = new UInt32[65], x = new UInt32[16];
270            UInt32 QM0, QM1, QM2, QM3, AA0, BB0, CC0, DD0;
271            UInt32 zavorka_Q19, zavorka_Q20, zavorka_Q23, zavorka_Q35, zavorka_Q62;
272            UInt32 Q9, Q4, Q14, Q13, Q20, Q10;//Hicitac29 =0,Locitac29=0,HiQ1617=0,LoQ1617=0;
273            UInt32 bitI, bit_I_neg, bitJ, bit_Q15_32;
274            UInt32[] IHV1 = new UInt32[4], IHV0 = new UInt32[4], HIHV1 = new UInt32[4], HIHV0 = new UInt32[4];
275            UInt32 tempq3, tempq4, tempq13, tempq14, tempq20, tempq21, tempq9, tempq10;
276            UInt32 tempx1, tempx15, tempx4;
277            UInt32 tempq6, tempq16, tempq17;
278            UInt32[] mask_Q9 = new UInt32[8] { 0x00000000, 0x00200000, 0x00400000, 0x00600000, 0x00800000, 0x00A00000, 0x00C00000, 0x00E00000 };
279            UInt32[] maskQ13 = new UInt32[4096] 
280                {
281                0x00000000,0x00000002,0x00000004,0x00000006,0x00000010,0x00000012,0x00000014,0x00000016,
282                0x00000040,0x00000042,0x00000044,0x00000046,0x00000050,0x00000052,0x00000054,0x00000056,
283                0x00000200,0x00000202,0x00000204,0x00000206,0x00000210,0x00000212,0x00000214,0x00000216,
284                0x00000240,0x00000242,0x00000244,0x00000246,0x00000250,0x00000252,0x00000254,0x00000256,
285                0x00000400,0x00000402,0x00000404,0x00000406,0x00000410,0x00000412,0x00000414,0x00000416,
286                0x00000440,0x00000442,0x00000444,0x00000446,0x00000450,0x00000452,0x00000454,0x00000456,
287                0x00000600,0x00000602,0x00000604,0x00000606,0x00000610,0x00000612,0x00000614,0x00000616,
288                0x00000640,0x00000642,0x00000644,0x00000646,0x00000650,0x00000652,0x00000654,0x00000656,
289                0x00000800,0x00000802,0x00000804,0x00000806,0x00000810,0x00000812,0x00000814,0x00000816,
290                0x00000840,0x00000842,0x00000844,0x00000846,0x00000850,0x00000852,0x00000854,0x00000856,
291                0x00000A00,0x00000A02,0x00000A04,0x00000A06,0x00000A10,0x00000A12,0x00000A14,0x00000A16,
292                0x00000A40,0x00000A42,0x00000A44,0x00000A46,0x00000A50,0x00000A52,0x00000A54,0x00000A56,
293                0x00000C00,0x00000C02,0x00000C04,0x00000C06,0x00000C10,0x00000C12,0x00000C14,0x00000C16,
294                0x00000C40,0x00000C42,0x00000C44,0x00000C46,0x00000C50,0x00000C52,0x00000C54,0x00000C56,
295                0x00000E00,0x00000E02,0x00000E04,0x00000E06,0x00000E10,0x00000E12,0x00000E14,0x00000E16,
296                0x00000E40,0x00000E42,0x00000E44,0x00000E46,0x00000E50,0x00000E52,0x00000E54,0x00000E56,
297                0x00100000,0x00100002,0x00100004,0x00100006,0x00100010,0x00100012,0x00100014,0x00100016,
298                0x00100040,0x00100042,0x00100044,0x00100046,0x00100050,0x00100052,0x00100054,0x00100056,
299                0x00100200,0x00100202,0x00100204,0x00100206,0x00100210,0x00100212,0x00100214,0x00100216,
300                0x00100240,0x00100242,0x00100244,0x00100246,0x00100250,0x00100252,0x00100254,0x00100256,
301                0x00100400,0x00100402,0x00100404,0x00100406,0x00100410,0x00100412,0x00100414,0x00100416,
302                0x00100440,0x00100442,0x00100444,0x00100446,0x00100450,0x00100452,0x00100454,0x00100456,
303                0x00100600,0x00100602,0x00100604,0x00100606,0x00100610,0x00100612,0x00100614,0x00100616,
304                0x00100640,0x00100642,0x00100644,0x00100646,0x00100650,0x00100652,0x00100654,0x00100656,
305                0x00100800,0x00100802,0x00100804,0x00100806,0x00100810,0x00100812,0x00100814,0x00100816,
306                0x00100840,0x00100842,0x00100844,0x00100846,0x00100850,0x00100852,0x00100854,0x00100856,
307                0x00100A00,0x00100A02,0x00100A04,0x00100A06,0x00100A10,0x00100A12,0x00100A14,0x00100A16,
308                0x00100A40,0x00100A42,0x00100A44,0x00100A46,0x00100A50,0x00100A52,0x00100A54,0x00100A56,
309                0x00100C00,0x00100C02,0x00100C04,0x00100C06,0x00100C10,0x00100C12,0x00100C14,0x00100C16,
310                0x00100C40,0x00100C42,0x00100C44,0x00100C46,0x00100C50,0x00100C52,0x00100C54,0x00100C56,
311                0x00100E00,0x00100E02,0x00100E04,0x00100E06,0x00100E10,0x00100E12,0x00100E14,0x00100E16,
312                0x00100E40,0x00100E42,0x00100E44,0x00100E46,0x00100E50,0x00100E52,0x00100E54,0x00100E56,
313                0x00200000,0x00200002,0x00200004,0x00200006,0x00200010,0x00200012,0x00200014,0x00200016,
314                0x00200040,0x00200042,0x00200044,0x00200046,0x00200050,0x00200052,0x00200054,0x00200056,
315                0x00200200,0x00200202,0x00200204,0x00200206,0x00200210,0x00200212,0x00200214,0x00200216,
316                0x00200240,0x00200242,0x00200244,0x00200246,0x00200250,0x00200252,0x00200254,0x00200256,
317                0x00200400,0x00200402,0x00200404,0x00200406,0x00200410,0x00200412,0x00200414,0x00200416,
318                0x00200440,0x00200442,0x00200444,0x00200446,0x00200450,0x00200452,0x00200454,0x00200456,
319                0x00200600,0x00200602,0x00200604,0x00200606,0x00200610,0x00200612,0x00200614,0x00200616,
320                0x00200640,0x00200642,0x00200644,0x00200646,0x00200650,0x00200652,0x00200654,0x00200656,
321                0x00200800,0x00200802,0x00200804,0x00200806,0x00200810,0x00200812,0x00200814,0x00200816,
322                0x00200840,0x00200842,0x00200844,0x00200846,0x00200850,0x00200852,0x00200854,0x00200856,
323                0x00200A00,0x00200A02,0x00200A04,0x00200A06,0x00200A10,0x00200A12,0x00200A14,0x00200A16,
324                0x00200A40,0x00200A42,0x00200A44,0x00200A46,0x00200A50,0x00200A52,0x00200A54,0x00200A56,
325                0x00200C00,0x00200C02,0x00200C04,0x00200C06,0x00200C10,0x00200C12,0x00200C14,0x00200C16,
326                0x00200C40,0x00200C42,0x00200C44,0x00200C46,0x00200C50,0x00200C52,0x00200C54,0x00200C56,
327                0x00200E00,0x00200E02,0x00200E04,0x00200E06,0x00200E10,0x00200E12,0x00200E14,0x00200E16,
328                0x00200E40,0x00200E42,0x00200E44,0x00200E46,0x00200E50,0x00200E52,0x00200E54,0x00200E56,
329                0x00300000,0x00300002,0x00300004,0x00300006,0x00300010,0x00300012,0x00300014,0x00300016,
330                0x00300040,0x00300042,0x00300044,0x00300046,0x00300050,0x00300052,0x00300054,0x00300056,
331                0x00300200,0x00300202,0x00300204,0x00300206,0x00300210,0x00300212,0x00300214,0x00300216,
332                0x00300240,0x00300242,0x00300244,0x00300246,0x00300250,0x00300252,0x00300254,0x00300256,
333                0x00300400,0x00300402,0x00300404,0x00300406,0x00300410,0x00300412,0x00300414,0x00300416,
334                0x00300440,0x00300442,0x00300444,0x00300446,0x00300450,0x00300452,0x00300454,0x00300456,
335                0x00300600,0x00300602,0x00300604,0x00300606,0x00300610,0x00300612,0x00300614,0x00300616,
336                0x00300640,0x00300642,0x00300644,0x00300646,0x00300650,0x00300652,0x00300654,0x00300656,
337                0x00300800,0x00300802,0x00300804,0x00300806,0x00300810,0x00300812,0x00300814,0x00300816,
338                0x00300840,0x00300842,0x00300844,0x00300846,0x00300850,0x00300852,0x00300854,0x00300856,
339                0x00300A00,0x00300A02,0x00300A04,0x00300A06,0x00300A10,0x00300A12,0x00300A14,0x00300A16,
340                0x00300A40,0x00300A42,0x00300A44,0x00300A46,0x00300A50,0x00300A52,0x00300A54,0x00300A56,
341                0x00300C00,0x00300C02,0x00300C04,0x00300C06,0x00300C10,0x00300C12,0x00300C14,0x00300C16,
342                0x00300C40,0x00300C42,0x00300C44,0x00300C46,0x00300C50,0x00300C52,0x00300C54,0x00300C56,
343                0x00300E00,0x00300E02,0x00300E04,0x00300E06,0x00300E10,0x00300E12,0x00300E14,0x00300E16,
344                0x00300E40,0x00300E42,0x00300E44,0x00300E46,0x00300E50,0x00300E52,0x00300E54,0x00300E56,
345                0x00400000,0x00400002,0x00400004,0x00400006,0x00400010,0x00400012,0x00400014,0x00400016,
346                0x00400040,0x00400042,0x00400044,0x00400046,0x00400050,0x00400052,0x00400054,0x00400056,
347                0x00400200,0x00400202,0x00400204,0x00400206,0x00400210,0x00400212,0x00400214,0x00400216,
348                0x00400240,0x00400242,0x00400244,0x00400246,0x00400250,0x00400252,0x00400254,0x00400256,
349                0x00400400,0x00400402,0x00400404,0x00400406,0x00400410,0x00400412,0x00400414,0x00400416,
350                0x00400440,0x00400442,0x00400444,0x00400446,0x00400450,0x00400452,0x00400454,0x00400456,
351                0x00400600,0x00400602,0x00400604,0x00400606,0x00400610,0x00400612,0x00400614,0x00400616,
352                0x00400640,0x00400642,0x00400644,0x00400646,0x00400650,0x00400652,0x00400654,0x00400656,
353                0x00400800,0x00400802,0x00400804,0x00400806,0x00400810,0x00400812,0x00400814,0x00400816,
354                0x00400840,0x00400842,0x00400844,0x00400846,0x00400850,0x00400852,0x00400854,0x00400856,
355                0x00400A00,0x00400A02,0x00400A04,0x00400A06,0x00400A10,0x00400A12,0x00400A14,0x00400A16,
356                0x00400A40,0x00400A42,0x00400A44,0x00400A46,0x00400A50,0x00400A52,0x00400A54,0x00400A56,
357                0x00400C00,0x00400C02,0x00400C04,0x00400C06,0x00400C10,0x00400C12,0x00400C14,0x00400C16,
358                0x00400C40,0x00400C42,0x00400C44,0x00400C46,0x00400C50,0x00400C52,0x00400C54,0x00400C56,
359                0x00400E00,0x00400E02,0x00400E04,0x00400E06,0x00400E10,0x00400E12,0x00400E14,0x00400E16,
360                0x00400E40,0x00400E42,0x00400E44,0x00400E46,0x00400E50,0x00400E52,0x00400E54,0x00400E56,
361                0x00500000,0x00500002,0x00500004,0x00500006,0x00500010,0x00500012,0x00500014,0x00500016,
362                0x00500040,0x00500042,0x00500044,0x00500046,0x00500050,0x00500052,0x00500054,0x00500056,
363                0x00500200,0x00500202,0x00500204,0x00500206,0x00500210,0x00500212,0x00500214,0x00500216,
364                0x00500240,0x00500242,0x00500244,0x00500246,0x00500250,0x00500252,0x00500254,0x00500256,
365                0x00500400,0x00500402,0x00500404,0x00500406,0x00500410,0x00500412,0x00500414,0x00500416,
366                0x00500440,0x00500442,0x00500444,0x00500446,0x00500450,0x00500452,0x00500454,0x00500456,
367                0x00500600,0x00500602,0x00500604,0x00500606,0x00500610,0x00500612,0x00500614,0x00500616,
368                0x00500640,0x00500642,0x00500644,0x00500646,0x00500650,0x00500652,0x00500654,0x00500656,
369                0x00500800,0x00500802,0x00500804,0x00500806,0x00500810,0x00500812,0x00500814,0x00500816,
370                0x00500840,0x00500842,0x00500844,0x00500846,0x00500850,0x00500852,0x00500854,0x00500856,
371                0x00500A00,0x00500A02,0x00500A04,0x00500A06,0x00500A10,0x00500A12,0x00500A14,0x00500A16,
372                0x00500A40,0x00500A42,0x00500A44,0x00500A46,0x00500A50,0x00500A52,0x00500A54,0x00500A56,
373                0x00500C00,0x00500C02,0x00500C04,0x00500C06,0x00500C10,0x00500C12,0x00500C14,0x00500C16,
374                0x00500C40,0x00500C42,0x00500C44,0x00500C46,0x00500C50,0x00500C52,0x00500C54,0x00500C56,
375                0x00500E00,0x00500E02,0x00500E04,0x00500E06,0x00500E10,0x00500E12,0x00500E14,0x00500E16,
376                0x00500E40,0x00500E42,0x00500E44,0x00500E46,0x00500E50,0x00500E52,0x00500E54,0x00500E56,
377                0x00600000,0x00600002,0x00600004,0x00600006,0x00600010,0x00600012,0x00600014,0x00600016,
378                0x00600040,0x00600042,0x00600044,0x00600046,0x00600050,0x00600052,0x00600054,0x00600056,
379                0x00600200,0x00600202,0x00600204,0x00600206,0x00600210,0x00600212,0x00600214,0x00600216,
380                0x00600240,0x00600242,0x00600244,0x00600246,0x00600250,0x00600252,0x00600254,0x00600256,
381                0x00600400,0x00600402,0x00600404,0x00600406,0x00600410,0x00600412,0x00600414,0x00600416,
382                0x00600440,0x00600442,0x00600444,0x00600446,0x00600450,0x00600452,0x00600454,0x00600456,
383                0x00600600,0x00600602,0x00600604,0x00600606,0x00600610,0x00600612,0x00600614,0x00600616,
384                0x00600640,0x00600642,0x00600644,0x00600646,0x00600650,0x00600652,0x00600654,0x00600656,
385                0x00600800,0x00600802,0x00600804,0x00600806,0x00600810,0x00600812,0x00600814,0x00600816,
386                0x00600840,0x00600842,0x00600844,0x00600846,0x00600850,0x00600852,0x00600854,0x00600856,
387                0x00600A00,0x00600A02,0x00600A04,0x00600A06,0x00600A10,0x00600A12,0x00600A14,0x00600A16,
388                0x00600A40,0x00600A42,0x00600A44,0x00600A46,0x00600A50,0x00600A52,0x00600A54,0x00600A56,
389                0x00600C00,0x00600C02,0x00600C04,0x00600C06,0x00600C10,0x00600C12,0x00600C14,0x00600C16,
390                0x00600C40,0x00600C42,0x00600C44,0x00600C46,0x00600C50,0x00600C52,0x00600C54,0x00600C56,
391                0x00600E00,0x00600E02,0x00600E04,0x00600E06,0x00600E10,0x00600E12,0x00600E14,0x00600E16,
392                0x00600E40,0x00600E42,0x00600E44,0x00600E46,0x00600E50,0x00600E52,0x00600E54,0x00600E56,
393                0x00700000,0x00700002,0x00700004,0x00700006,0x00700010,0x00700012,0x00700014,0x00700016,
394                0x00700040,0x00700042,0x00700044,0x00700046,0x00700050,0x00700052,0x00700054,0x00700056,
395                0x00700200,0x00700202,0x00700204,0x00700206,0x00700210,0x00700212,0x00700214,0x00700216,
396                0x00700240,0x00700242,0x00700244,0x00700246,0x00700250,0x00700252,0x00700254,0x00700256,
397                0x00700400,0x00700402,0x00700404,0x00700406,0x00700410,0x00700412,0x00700414,0x00700416,
398                0x00700440,0x00700442,0x00700444,0x00700446,0x00700450,0x00700452,0x00700454,0x00700456,
399                0x00700600,0x00700602,0x00700604,0x00700606,0x00700610,0x00700612,0x00700614,0x00700616,
400                0x00700640,0x00700642,0x00700644,0x00700646,0x00700650,0x00700652,0x00700654,0x00700656,
401                0x00700800,0x00700802,0x00700804,0x00700806,0x00700810,0x00700812,0x00700814,0x00700816,
402                0x00700840,0x00700842,0x00700844,0x00700846,0x00700850,0x00700852,0x00700854,0x00700856,
403                0x00700A00,0x00700A02,0x00700A04,0x00700A06,0x00700A10,0x00700A12,0x00700A14,0x00700A16,
404                0x00700A40,0x00700A42,0x00700A44,0x00700A46,0x00700A50,0x00700A52,0x00700A54,0x00700A56,
405                0x00700C00,0x00700C02,0x00700C04,0x00700C06,0x00700C10,0x00700C12,0x00700C14,0x00700C16,
406                0x00700C40,0x00700C42,0x00700C44,0x00700C46,0x00700C50,0x00700C52,0x00700C54,0x00700C56,
407                0x00700E00,0x00700E02,0x00700E04,0x00700E06,0x00700E10,0x00700E12,0x00700E14,0x00700E16,
408                0x00700E40,0x00700E42,0x00700E44,0x00700E46,0x00700E50,0x00700E52,0x00700E54,0x00700E56,
409                0x08000000,0x08000002,0x08000004,0x08000006,0x08000010,0x08000012,0x08000014,0x08000016,
410                0x08000040,0x08000042,0x08000044,0x08000046,0x08000050,0x08000052,0x08000054,0x08000056,
411                0x08000200,0x08000202,0x08000204,0x08000206,0x08000210,0x08000212,0x08000214,0x08000216,
412                0x08000240,0x08000242,0x08000244,0x08000246,0x08000250,0x08000252,0x08000254,0x08000256,
413                0x08000400,0x08000402,0x08000404,0x08000406,0x08000410,0x08000412,0x08000414,0x08000416,
414                0x08000440,0x08000442,0x08000444,0x08000446,0x08000450,0x08000452,0x08000454,0x08000456,
415                0x08000600,0x08000602,0x08000604,0x08000606,0x08000610,0x08000612,0x08000614,0x08000616,
416                0x08000640,0x08000642,0x08000644,0x08000646,0x08000650,0x08000652,0x08000654,0x08000656,
417                0x08000800,0x08000802,0x08000804,0x08000806,0x08000810,0x08000812,0x08000814,0x08000816,
418                0x08000840,0x08000842,0x08000844,0x08000846,0x08000850,0x08000852,0x08000854,0x08000856,
419                0x08000A00,0x08000A02,0x08000A04,0x08000A06,0x08000A10,0x08000A12,0x08000A14,0x08000A16,
420                0x08000A40,0x08000A42,0x08000A44,0x08000A46,0x08000A50,0x08000A52,0x08000A54,0x08000A56,
421                0x08000C00,0x08000C02,0x08000C04,0x08000C06,0x08000C10,0x08000C12,0x08000C14,0x08000C16,
422                0x08000C40,0x08000C42,0x08000C44,0x08000C46,0x08000C50,0x08000C52,0x08000C54,0x08000C56,
423                0x08000E00,0x08000E02,0x08000E04,0x08000E06,0x08000E10,0x08000E12,0x08000E14,0x08000E16,
424                0x08000E40,0x08000E42,0x08000E44,0x08000E46,0x08000E50,0x08000E52,0x08000E54,0x08000E56,
425                0x08100000,0x08100002,0x08100004,0x08100006,0x08100010,0x08100012,0x08100014,0x08100016,
426                0x08100040,0x08100042,0x08100044,0x08100046,0x08100050,0x08100052,0x08100054,0x08100056,
427                0x08100200,0x08100202,0x08100204,0x08100206,0x08100210,0x08100212,0x08100214,0x08100216,
428                0x08100240,0x08100242,0x08100244,0x08100246,0x08100250,0x08100252,0x08100254,0x08100256,
429                0x08100400,0x08100402,0x08100404,0x08100406,0x08100410,0x08100412,0x08100414,0x08100416,
430                0x08100440,0x08100442,0x08100444,0x08100446,0x08100450,0x08100452,0x08100454,0x08100456,
431                0x08100600,0x08100602,0x08100604,0x08100606,0x08100610,0x08100612,0x08100614,0x08100616,
432                0x08100640,0x08100642,0x08100644,0x08100646,0x08100650,0x08100652,0x08100654,0x08100656,
433                0x08100800,0x08100802,0x08100804,0x08100806,0x08100810,0x08100812,0x08100814,0x08100816,
434                0x08100840,0x08100842,0x08100844,0x08100846,0x08100850,0x08100852,0x08100854,0x08100856,
435                0x08100A00,0x08100A02,0x08100A04,0x08100A06,0x08100A10,0x08100A12,0x08100A14,0x08100A16,
436                0x08100A40,0x08100A42,0x08100A44,0x08100A46,0x08100A50,0x08100A52,0x08100A54,0x08100A56,
437                0x08100C00,0x08100C02,0x08100C04,0x08100C06,0x08100C10,0x08100C12,0x08100C14,0x08100C16,
438                0x08100C40,0x08100C42,0x08100C44,0x08100C46,0x08100C50,0x08100C52,0x08100C54,0x08100C56,
439                0x08100E00,0x08100E02,0x08100E04,0x08100E06,0x08100E10,0x08100E12,0x08100E14,0x08100E16,
440                0x08100E40,0x08100E42,0x08100E44,0x08100E46,0x08100E50,0x08100E52,0x08100E54,0x08100E56,
441                0x08200000,0x08200002,0x08200004,0x08200006,0x08200010,0x08200012,0x08200014,0x08200016,
442                0x08200040,0x08200042,0x08200044,0x08200046,0x08200050,0x08200052,0x08200054,0x08200056,
443                0x08200200,0x08200202,0x08200204,0x08200206,0x08200210,0x08200212,0x08200214,0x08200216,
444                0x08200240,0x08200242,0x08200244,0x08200246,0x08200250,0x08200252,0x08200254,0x08200256,
445                0x08200400,0x08200402,0x08200404,0x08200406,0x08200410,0x08200412,0x08200414,0x08200416,
446                0x08200440,0x08200442,0x08200444,0x08200446,0x08200450,0x08200452,0x08200454,0x08200456,
447                0x08200600,0x08200602,0x08200604,0x08200606,0x08200610,0x08200612,0x08200614,0x08200616,
448                0x08200640,0x08200642,0x08200644,0x08200646,0x08200650,0x08200652,0x08200654,0x08200656,
449                0x08200800,0x08200802,0x08200804,0x08200806,0x08200810,0x08200812,0x08200814,0x08200816,
450                0x08200840,0x08200842,0x08200844,0x08200846,0x08200850,0x08200852,0x08200854,0x08200856,
451                0x08200A00,0x08200A02,0x08200A04,0x08200A06,0x08200A10,0x08200A12,0x08200A14,0x08200A16,
452                0x08200A40,0x08200A42,0x08200A44,0x08200A46,0x08200A50,0x08200A52,0x08200A54,0x08200A56,
453                0x08200C00,0x08200C02,0x08200C04,0x08200C06,0x08200C10,0x08200C12,0x08200C14,0x08200C16,
454                0x08200C40,0x08200C42,0x08200C44,0x08200C46,0x08200C50,0x08200C52,0x08200C54,0x08200C56,
455                0x08200E00,0x08200E02,0x08200E04,0x08200E06,0x08200E10,0x08200E12,0x08200E14,0x08200E16,
456                0x08200E40,0x08200E42,0x08200E44,0x08200E46,0x08200E50,0x08200E52,0x08200E54,0x08200E56,
457                0x08300000,0x08300002,0x08300004,0x08300006,0x08300010,0x08300012,0x08300014,0x08300016,
458                0x08300040,0x08300042,0x08300044,0x08300046,0x08300050,0x08300052,0x08300054,0x08300056,
459                0x08300200,0x08300202,0x08300204,0x08300206,0x08300210,0x08300212,0x08300214,0x08300216,
460                0x08300240,0x08300242,0x08300244,0x08300246,0x08300250,0x08300252,0x08300254,0x08300256,
461                0x08300400,0x08300402,0x08300404,0x08300406,0x08300410,0x08300412,0x08300414,0x08300416,
462                0x08300440,0x08300442,0x08300444,0x08300446,0x08300450,0x08300452,0x08300454,0x08300456,
463                0x08300600,0x08300602,0x08300604,0x08300606,0x08300610,0x08300612,0x08300614,0x08300616,
464                0x08300640,0x08300642,0x08300644,0x08300646,0x08300650,0x08300652,0x08300654,0x08300656,
465                0x08300800,0x08300802,0x08300804,0x08300806,0x08300810,0x08300812,0x08300814,0x08300816,
466                0x08300840,0x08300842,0x08300844,0x08300846,0x08300850,0x08300852,0x08300854,0x08300856,
467                0x08300A00,0x08300A02,0x08300A04,0x08300A06,0x08300A10,0x08300A12,0x08300A14,0x08300A16,
468                0x08300A40,0x08300A42,0x08300A44,0x08300A46,0x08300A50,0x08300A52,0x08300A54,0x08300A56,
469                0x08300C00,0x08300C02,0x08300C04,0x08300C06,0x08300C10,0x08300C12,0x08300C14,0x08300C16,
470                0x08300C40,0x08300C42,0x08300C44,0x08300C46,0x08300C50,0x08300C52,0x08300C54,0x08300C56,
471                0x08300E00,0x08300E02,0x08300E04,0x08300E06,0x08300E10,0x08300E12,0x08300E14,0x08300E16,
472                0x08300E40,0x08300E42,0x08300E44,0x08300E46,0x08300E50,0x08300E52,0x08300E54,0x08300E56,
473                0x08400000,0x08400002,0x08400004,0x08400006,0x08400010,0x08400012,0x08400014,0x08400016,
474                0x08400040,0x08400042,0x08400044,0x08400046,0x08400050,0x08400052,0x08400054,0x08400056,
475                0x08400200,0x08400202,0x08400204,0x08400206,0x08400210,0x08400212,0x08400214,0x08400216,
476                0x08400240,0x08400242,0x08400244,0x08400246,0x08400250,0x08400252,0x08400254,0x08400256,
477                0x08400400,0x08400402,0x08400404,0x08400406,0x08400410,0x08400412,0x08400414,0x08400416,
478                0x08400440,0x08400442,0x08400444,0x08400446,0x08400450,0x08400452,0x08400454,0x08400456,
479                0x08400600,0x08400602,0x08400604,0x08400606,0x08400610,0x08400612,0x08400614,0x08400616,
480                0x08400640,0x08400642,0x08400644,0x08400646,0x08400650,0x08400652,0x08400654,0x08400656,
481                0x08400800,0x08400802,0x08400804,0x08400806,0x08400810,0x08400812,0x08400814,0x08400816,
482                0x08400840,0x08400842,0x08400844,0x08400846,0x08400850,0x08400852,0x08400854,0x08400856,
483                0x08400A00,0x08400A02,0x08400A04,0x08400A06,0x08400A10,0x08400A12,0x08400A14,0x08400A16,
484                0x08400A40,0x08400A42,0x08400A44,0x08400A46,0x08400A50,0x08400A52,0x08400A54,0x08400A56,
485                0x08400C00,0x08400C02,0x08400C04,0x08400C06,0x08400C10,0x08400C12,0x08400C14,0x08400C16,
486                0x08400C40,0x08400C42,0x08400C44,0x08400C46,0x08400C50,0x08400C52,0x08400C54,0x08400C56,
487                0x08400E00,0x08400E02,0x08400E04,0x08400E06,0x08400E10,0x08400E12,0x08400E14,0x08400E16,
488                0x08400E40,0x08400E42,0x08400E44,0x08400E46,0x08400E50,0x08400E52,0x08400E54,0x08400E56,
489                0x08500000,0x08500002,0x08500004,0x08500006,0x08500010,0x08500012,0x08500014,0x08500016,
490                0x08500040,0x08500042,0x08500044,0x08500046,0x08500050,0x08500052,0x08500054,0x08500056,
491                0x08500200,0x08500202,0x08500204,0x08500206,0x08500210,0x08500212,0x08500214,0x08500216,
492                0x08500240,0x08500242,0x08500244,0x08500246,0x08500250,0x08500252,0x08500254,0x08500256,
493                0x08500400,0x08500402,0x08500404,0x08500406,0x08500410,0x08500412,0x08500414,0x08500416,
494                0x08500440,0x08500442,0x08500444,0x08500446,0x08500450,0x08500452,0x08500454,0x08500456,
495                0x08500600,0x08500602,0x08500604,0x08500606,0x08500610,0x08500612,0x08500614,0x08500616,
496                0x08500640,0x08500642,0x08500644,0x08500646,0x08500650,0x08500652,0x08500654,0x08500656,
497                0x08500800,0x08500802,0x08500804,0x08500806,0x08500810,0x08500812,0x08500814,0x08500816,
498                0x08500840,0x08500842,0x08500844,0x08500846,0x08500850,0x08500852,0x08500854,0x08500856,
499                0x08500A00,0x08500A02,0x08500A04,0x08500A06,0x08500A10,0x08500A12,0x08500A14,0x08500A16,
500                0x08500A40,0x08500A42,0x08500A44,0x08500A46,0x08500A50,0x08500A52,0x08500A54,0x08500A56,
501                0x08500C00,0x08500C02,0x08500C04,0x08500C06,0x08500C10,0x08500C12,0x08500C14,0x08500C16,
502                0x08500C40,0x08500C42,0x08500C44,0x08500C46,0x08500C50,0x08500C52,0x08500C54,0x08500C56,
503                0x08500E00,0x08500E02,0x08500E04,0x08500E06,0x08500E10,0x08500E12,0x08500E14,0x08500E16,
504                0x08500E40,0x08500E42,0x08500E44,0x08500E46,0x08500E50,0x08500E52,0x08500E54,0x08500E56,
505                0x08600000,0x08600002,0x08600004,0x08600006,0x08600010,0x08600012,0x08600014,0x08600016,
506                0x08600040,0x08600042,0x08600044,0x08600046,0x08600050,0x08600052,0x08600054,0x08600056,
507                0x08600200,0x08600202,0x08600204,0x08600206,0x08600210,0x08600212,0x08600214,0x08600216,
508                0x08600240,0x08600242,0x08600244,0x08600246,0x08600250,0x08600252,0x08600254,0x08600256,
509                0x08600400,0x08600402,0x08600404,0x08600406,0x08600410,0x08600412,0x08600414,0x08600416,
510                0x08600440,0x08600442,0x08600444,0x08600446,0x08600450,0x08600452,0x08600454,0x08600456,
511                0x08600600,0x08600602,0x08600604,0x08600606,0x08600610,0x08600612,0x08600614,0x08600616,
512                0x08600640,0x08600642,0x08600644,0x08600646,0x08600650,0x08600652,0x08600654,0x08600656,
513                0x08600800,0x08600802,0x08600804,0x08600806,0x08600810,0x08600812,0x08600814,0x08600816,
514                0x08600840,0x08600842,0x08600844,0x08600846,0x08600850,0x08600852,0x08600854,0x08600856,
515                0x08600A00,0x08600A02,0x08600A04,0x08600A06,0x08600A10,0x08600A12,0x08600A14,0x08600A16,
516                0x08600A40,0x08600A42,0x08600A44,0x08600A46,0x08600A50,0x08600A52,0x08600A54,0x08600A56,
517                0x08600C00,0x08600C02,0x08600C04,0x08600C06,0x08600C10,0x08600C12,0x08600C14,0x08600C16,
518                0x08600C40,0x08600C42,0x08600C44,0x08600C46,0x08600C50,0x08600C52,0x08600C54,0x08600C56,
519                0x08600E00,0x08600E02,0x08600E04,0x08600E06,0x08600E10,0x08600E12,0x08600E14,0x08600E16,
520                0x08600E40,0x08600E42,0x08600E44,0x08600E46,0x08600E50,0x08600E52,0x08600E54,0x08600E56,
521                0x08700000,0x08700002,0x08700004,0x08700006,0x08700010,0x08700012,0x08700014,0x08700016,
522                0x08700040,0x08700042,0x08700044,0x08700046,0x08700050,0x08700052,0x08700054,0x08700056,
523                0x08700200,0x08700202,0x08700204,0x08700206,0x08700210,0x08700212,0x08700214,0x08700216,
524                0x08700240,0x08700242,0x08700244,0x08700246,0x08700250,0x08700252,0x08700254,0x08700256,
525                0x08700400,0x08700402,0x08700404,0x08700406,0x08700410,0x08700412,0x08700414,0x08700416,
526                0x08700440,0x08700442,0x08700444,0x08700446,0x08700450,0x08700452,0x08700454,0x08700456,
527                0x08700600,0x08700602,0x08700604,0x08700606,0x08700610,0x08700612,0x08700614,0x08700616,
528                0x08700640,0x08700642,0x08700644,0x08700646,0x08700650,0x08700652,0x08700654,0x08700656,
529                0x08700800,0x08700802,0x08700804,0x08700806,0x08700810,0x08700812,0x08700814,0x08700816,
530                0x08700840,0x08700842,0x08700844,0x08700846,0x08700850,0x08700852,0x08700854,0x08700856,
531                0x08700A00,0x08700A02,0x08700A04,0x08700A06,0x08700A10,0x08700A12,0x08700A14,0x08700A16,
532                0x08700A40,0x08700A42,0x08700A44,0x08700A46,0x08700A50,0x08700A52,0x08700A54,0x08700A56,
533                0x08700C00,0x08700C02,0x08700C04,0x08700C06,0x08700C10,0x08700C12,0x08700C14,0x08700C16,
534                0x08700C40,0x08700C42,0x08700C44,0x08700C46,0x08700C50,0x08700C52,0x08700C54,0x08700C56,
535                0x08700E00,0x08700E02,0x08700E04,0x08700E06,0x08700E10,0x08700E12,0x08700E14,0x08700E16,
536                0x08700E40,0x08700E42,0x08700E44,0x08700E46,0x08700E50,0x08700E52,0x08700E54,0x08700E56,
537                0x10000000,0x10000002,0x10000004,0x10000006,0x10000010,0x10000012,0x10000014,0x10000016,
538                0x10000040,0x10000042,0x10000044,0x10000046,0x10000050,0x10000052,0x10000054,0x10000056,
539                0x10000200,0x10000202,0x10000204,0x10000206,0x10000210,0x10000212,0x10000214,0x10000216,
540                0x10000240,0x10000242,0x10000244,0x10000246,0x10000250,0x10000252,0x10000254,0x10000256,
541                0x10000400,0x10000402,0x10000404,0x10000406,0x10000410,0x10000412,0x10000414,0x10000416,
542                0x10000440,0x10000442,0x10000444,0x10000446,0x10000450,0x10000452,0x10000454,0x10000456,
543                0x10000600,0x10000602,0x10000604,0x10000606,0x10000610,0x10000612,0x10000614,0x10000616,
544                0x10000640,0x10000642,0x10000644,0x10000646,0x10000650,0x10000652,0x10000654,0x10000656,
545                0x10000800,0x10000802,0x10000804,0x10000806,0x10000810,0x10000812,0x10000814,0x10000816,
546                0x10000840,0x10000842,0x10000844,0x10000846,0x10000850,0x10000852,0x10000854,0x10000856,
547                0x10000A00,0x10000A02,0x10000A04,0x10000A06,0x10000A10,0x10000A12,0x10000A14,0x10000A16,
548                0x10000A40,0x10000A42,0x10000A44,0x10000A46,0x10000A50,0x10000A52,0x10000A54,0x10000A56,
549                0x10000C00,0x10000C02,0x10000C04,0x10000C06,0x10000C10,0x10000C12,0x10000C14,0x10000C16,
550                0x10000C40,0x10000C42,0x10000C44,0x10000C46,0x10000C50,0x10000C52,0x10000C54,0x10000C56,
551                0x10000E00,0x10000E02,0x10000E04,0x10000E06,0x10000E10,0x10000E12,0x10000E14,0x10000E16,
552                0x10000E40,0x10000E42,0x10000E44,0x10000E46,0x10000E50,0x10000E52,0x10000E54,0x10000E56,
553                0x10100000,0x10100002,0x10100004,0x10100006,0x10100010,0x10100012,0x10100014,0x10100016,
554                0x10100040,0x10100042,0x10100044,0x10100046,0x10100050,0x10100052,0x10100054,0x10100056,
555                0x10100200,0x10100202,0x10100204,0x10100206,0x10100210,0x10100212,0x10100214,0x10100216,
556                0x10100240,0x10100242,0x10100244,0x10100246,0x10100250,0x10100252,0x10100254,0x10100256,
557                0x10100400,0x10100402,0x10100404,0x10100406,0x10100410,0x10100412,0x10100414,0x10100416,
558                0x10100440,0x10100442,0x10100444,0x10100446,0x10100450,0x10100452,0x10100454,0x10100456,
559                0x10100600,0x10100602,0x10100604,0x10100606,0x10100610,0x10100612,0x10100614,0x10100616,
560                0x10100640,0x10100642,0x10100644,0x10100646,0x10100650,0x10100652,0x10100654,0x10100656,
561                0x10100800,0x10100802,0x10100804,0x10100806,0x10100810,0x10100812,0x10100814,0x10100816,
562                0x10100840,0x10100842,0x10100844,0x10100846,0x10100850,0x10100852,0x10100854,0x10100856,
563                0x10100A00,0x10100A02,0x10100A04,0x10100A06,0x10100A10,0x10100A12,0x10100A14,0x10100A16,
564                0x10100A40,0x10100A42,0x10100A44,0x10100A46,0x10100A50,0x10100A52,0x10100A54,0x10100A56,
565                0x10100C00,0x10100C02,0x10100C04,0x10100C06,0x10100C10,0x10100C12,0x10100C14,0x10100C16,
566                0x10100C40,0x10100C42,0x10100C44,0x10100C46,0x10100C50,0x10100C52,0x10100C54,0x10100C56,
567                0x10100E00,0x10100E02,0x10100E04,0x10100E06,0x10100E10,0x10100E12,0x10100E14,0x10100E16,
568                0x10100E40,0x10100E42,0x10100E44,0x10100E46,0x10100E50,0x10100E52,0x10100E54,0x10100E56,
569                0x10200000,0x10200002,0x10200004,0x10200006,0x10200010,0x10200012,0x10200014,0x10200016,
570                0x10200040,0x10200042,0x10200044,0x10200046,0x10200050,0x10200052,0x10200054,0x10200056,
571                0x10200200,0x10200202,0x10200204,0x10200206,0x10200210,0x10200212,0x10200214,0x10200216,
572                0x10200240,0x10200242,0x10200244,0x10200246,0x10200250,0x10200252,0x10200254,0x10200256,
573                0x10200400,0x10200402,0x10200404,0x10200406,0x10200410,0x10200412,0x10200414,0x10200416,
574                0x10200440,0x10200442,0x10200444,0x10200446,0x10200450,0x10200452,0x10200454,0x10200456,
575                0x10200600,0x10200602,0x10200604,0x10200606,0x10200610,0x10200612,0x10200614,0x10200616,
576                0x10200640,0x10200642,0x10200644,0x10200646,0x10200650,0x10200652,0x10200654,0x10200656,
577                0x10200800,0x10200802,0x10200804,0x10200806,0x10200810,0x10200812,0x10200814,0x10200816,
578                0x10200840,0x10200842,0x10200844,0x10200846,0x10200850,0x10200852,0x10200854,0x10200856,
579                0x10200A00,0x10200A02,0x10200A04,0x10200A06,0x10200A10,0x10200A12,0x10200A14,0x10200A16,
580                0x10200A40,0x10200A42,0x10200A44,0x10200A46,0x10200A50,0x10200A52,0x10200A54,0x10200A56,
581                0x10200C00,0x10200C02,0x10200C04,0x10200C06,0x10200C10,0x10200C12,0x10200C14,0x10200C16,
582                0x10200C40,0x10200C42,0x10200C44,0x10200C46,0x10200C50,0x10200C52,0x10200C54,0x10200C56,
583                0x10200E00,0x10200E02,0x10200E04,0x10200E06,0x10200E10,0x10200E12,0x10200E14,0x10200E16,
584                0x10200E40,0x10200E42,0x10200E44,0x10200E46,0x10200E50,0x10200E52,0x10200E54,0x10200E56,
585                0x10300000,0x10300002,0x10300004,0x10300006,0x10300010,0x10300012,0x10300014,0x10300016,
586                0x10300040,0x10300042,0x10300044,0x10300046,0x10300050,0x10300052,0x10300054,0x10300056,
587                0x10300200,0x10300202,0x10300204,0x10300206,0x10300210,0x10300212,0x10300214,0x10300216,
588                0x10300240,0x10300242,0x10300244,0x10300246,0x10300250,0x10300252,0x10300254,0x10300256,
589                0x10300400,0x10300402,0x10300404,0x10300406,0x10300410,0x10300412,0x10300414,0x10300416,
590                0x10300440,0x10300442,0x10300444,0x10300446,0x10300450,0x10300452,0x10300454,0x10300456,
591                0x10300600,0x10300602,0x10300604,0x10300606,0x10300610,0x10300612,0x10300614,0x10300616,
592                0x10300640,0x10300642,0x10300644,0x10300646,0x10300650,0x10300652,0x10300654,0x10300656,
593                0x10300800,0x10300802,0x10300804,0x10300806,0x10300810,0x10300812,0x10300814,0x10300816,
594                0x10300840,0x10300842,0x10300844,0x10300846,0x10300850,0x10300852,0x10300854,0x10300856,
595                0x10300A00,0x10300A02,0x10300A04,0x10300A06,0x10300A10,0x10300A12,0x10300A14,0x10300A16,
596                0x10300A40,0x10300A42,0x10300A44,0x10300A46,0x10300A50,0x10300A52,0x10300A54,0x10300A56,
597                0x10300C00,0x10300C02,0x10300C04,0x10300C06,0x10300C10,0x10300C12,0x10300C14,0x10300C16,
598                0x10300C40,0x10300C42,0x10300C44,0x10300C46,0x10300C50,0x10300C52,0x10300C54,0x10300C56,
599                0x10300E00,0x10300E02,0x10300E04,0x10300E06,0x10300E10,0x10300E12,0x10300E14,0x10300E16,
600                0x10300E40,0x10300E42,0x10300E44,0x10300E46,0x10300E50,0x10300E52,0x10300E54,0x10300E56,
601                0x10400000,0x10400002,0x10400004,0x10400006,0x10400010,0x10400012,0x10400014,0x10400016,
602                0x10400040,0x10400042,0x10400044,0x10400046,0x10400050,0x10400052,0x10400054,0x10400056,
603                0x10400200,0x10400202,0x10400204,0x10400206,0x10400210,0x10400212,0x10400214,0x10400216,
604                0x10400240,0x10400242,0x10400244,0x10400246,0x10400250,0x10400252,0x10400254,0x10400256,
605                0x10400400,0x10400402,0x10400404,0x10400406,0x10400410,0x10400412,0x10400414,0x10400416,
606                0x10400440,0x10400442,0x10400444,0x10400446,0x10400450,0x10400452,0x10400454,0x10400456,
607                0x10400600,0x10400602,0x10400604,0x10400606,0x10400610,0x10400612,0x10400614,0x10400616,
608                0x10400640,0x10400642,0x10400644,0x10400646,0x10400650,0x10400652,0x10400654,0x10400656,
609                0x10400800,0x10400802,0x10400804,0x10400806,0x10400810,0x10400812,0x10400814,0x10400816,
610                0x10400840,0x10400842,0x10400844,0x10400846,0x10400850,0x10400852,0x10400854,0x10400856,
611                0x10400A00,0x10400A02,0x10400A04,0x10400A06,0x10400A10,0x10400A12,0x10400A14,0x10400A16,
612                0x10400A40,0x10400A42,0x10400A44,0x10400A46,0x10400A50,0x10400A52,0x10400A54,0x10400A56,
613                0x10400C00,0x10400C02,0x10400C04,0x10400C06,0x10400C10,0x10400C12,0x10400C14,0x10400C16,
614                0x10400C40,0x10400C42,0x10400C44,0x10400C46,0x10400C50,0x10400C52,0x10400C54,0x10400C56,
615                0x10400E00,0x10400E02,0x10400E04,0x10400E06,0x10400E10,0x10400E12,0x10400E14,0x10400E16,
616                0x10400E40,0x10400E42,0x10400E44,0x10400E46,0x10400E50,0x10400E52,0x10400E54,0x10400E56,
617                0x10500000,0x10500002,0x10500004,0x10500006,0x10500010,0x10500012,0x10500014,0x10500016,
618                0x10500040,0x10500042,0x10500044,0x10500046,0x10500050,0x10500052,0x10500054,0x10500056,
619                0x10500200,0x10500202,0x10500204,0x10500206,0x10500210,0x10500212,0x10500214,0x10500216,
620                0x10500240,0x10500242,0x10500244,0x10500246,0x10500250,0x10500252,0x10500254,0x10500256,
621                0x10500400,0x10500402,0x10500404,0x10500406,0x10500410,0x10500412,0x10500414,0x10500416,
622                0x10500440,0x10500442,0x10500444,0x10500446,0x10500450,0x10500452,0x10500454,0x10500456,
623                0x10500600,0x10500602,0x10500604,0x10500606,0x10500610,0x10500612,0x10500614,0x10500616,
624                0x10500640,0x10500642,0x10500644,0x10500646,0x10500650,0x10500652,0x10500654,0x10500656,
625                0x10500800,0x10500802,0x10500804,0x10500806,0x10500810,0x10500812,0x10500814,0x10500816,
626                0x10500840,0x10500842,0x10500844,0x10500846,0x10500850,0x10500852,0x10500854,0x10500856,
627                0x10500A00,0x10500A02,0x10500A04,0x10500A06,0x10500A10,0x10500A12,0x10500A14,0x10500A16,
628                0x10500A40,0x10500A42,0x10500A44,0x10500A46,0x10500A50,0x10500A52,0x10500A54,0x10500A56,
629                0x10500C00,0x10500C02,0x10500C04,0x10500C06,0x10500C10,0x10500C12,0x10500C14,0x10500C16,
630                0x10500C40,0x10500C42,0x10500C44,0x10500C46,0x10500C50,0x10500C52,0x10500C54,0x10500C56,
631                0x10500E00,0x10500E02,0x10500E04,0x10500E06,0x10500E10,0x10500E12,0x10500E14,0x10500E16,
632                0x10500E40,0x10500E42,0x10500E44,0x10500E46,0x10500E50,0x10500E52,0x10500E54,0x10500E56,
633                0x10600000,0x10600002,0x10600004,0x10600006,0x10600010,0x10600012,0x10600014,0x10600016,
634                0x10600040,0x10600042,0x10600044,0x10600046,0x10600050,0x10600052,0x10600054,0x10600056,
635                0x10600200,0x10600202,0x10600204,0x10600206,0x10600210,0x10600212,0x10600214,0x10600216,
636                0x10600240,0x10600242,0x10600244,0x10600246,0x10600250,0x10600252,0x10600254,0x10600256,
637                0x10600400,0x10600402,0x10600404,0x10600406,0x10600410,0x10600412,0x10600414,0x10600416,
638                0x10600440,0x10600442,0x10600444,0x10600446,0x10600450,0x10600452,0x10600454,0x10600456,
639                0x10600600,0x10600602,0x10600604,0x10600606,0x10600610,0x10600612,0x10600614,0x10600616,
640                0x10600640,0x10600642,0x10600644,0x10600646,0x10600650,0x10600652,0x10600654,0x10600656,
641                0x10600800,0x10600802,0x10600804,0x10600806,0x10600810,0x10600812,0x10600814,0x10600816,
642                0x10600840,0x10600842,0x10600844,0x10600846,0x10600850,0x10600852,0x10600854,0x10600856,
643                0x10600A00,0x10600A02,0x10600A04,0x10600A06,0x10600A10,0x10600A12,0x10600A14,0x10600A16,
644                0x10600A40,0x10600A42,0x10600A44,0x10600A46,0x10600A50,0x10600A52,0x10600A54,0x10600A56,
645                0x10600C00,0x10600C02,0x10600C04,0x10600C06,0x10600C10,0x10600C12,0x10600C14,0x10600C16,
646                0x10600C40,0x10600C42,0x10600C44,0x10600C46,0x10600C50,0x10600C52,0x10600C54,0x10600C56,
647                0x10600E00,0x10600E02,0x10600E04,0x10600E06,0x10600E10,0x10600E12,0x10600E14,0x10600E16,
648                0x10600E40,0x10600E42,0x10600E44,0x10600E46,0x10600E50,0x10600E52,0x10600E54,0x10600E56,
649                0x10700000,0x10700002,0x10700004,0x10700006,0x10700010,0x10700012,0x10700014,0x10700016,
650                0x10700040,0x10700042,0x10700044,0x10700046,0x10700050,0x10700052,0x10700054,0x10700056,
651                0x10700200,0x10700202,0x10700204,0x10700206,0x10700210,0x10700212,0x10700214,0x10700216,
652                0x10700240,0x10700242,0x10700244,0x10700246,0x10700250,0x10700252,0x10700254,0x10700256,
653                0x10700400,0x10700402,0x10700404,0x10700406,0x10700410,0x10700412,0x10700414,0x10700416,
654                0x10700440,0x10700442,0x10700444,0x10700446,0x10700450,0x10700452,0x10700454,0x10700456,
655                0x10700600,0x10700602,0x10700604,0x10700606,0x10700610,0x10700612,0x10700614,0x10700616,
656                0x10700640,0x10700642,0x10700644,0x10700646,0x10700650,0x10700652,0x10700654,0x10700656,
657                0x10700800,0x10700802,0x10700804,0x10700806,0x10700810,0x10700812,0x10700814,0x10700816,
658                0x10700840,0x10700842,0x10700844,0x10700846,0x10700850,0x10700852,0x10700854,0x10700856,
659                0x10700A00,0x10700A02,0x10700A04,0x10700A06,0x10700A10,0x10700A12,0x10700A14,0x10700A16,
660                0x10700A40,0x10700A42,0x10700A44,0x10700A46,0x10700A50,0x10700A52,0x10700A54,0x10700A56,
661                0x10700C00,0x10700C02,0x10700C04,0x10700C06,0x10700C10,0x10700C12,0x10700C14,0x10700C16,
662                0x10700C40,0x10700C42,0x10700C44,0x10700C46,0x10700C50,0x10700C52,0x10700C54,0x10700C56,
663                0x10700E00,0x10700E02,0x10700E04,0x10700E06,0x10700E10,0x10700E12,0x10700E14,0x10700E16,
664                0x10700E40,0x10700E42,0x10700E44,0x10700E46,0x10700E50,0x10700E52,0x10700E54,0x10700E56,
665                0x18000000,0x18000002,0x18000004,0x18000006,0x18000010,0x18000012,0x18000014,0x18000016,
666                0x18000040,0x18000042,0x18000044,0x18000046,0x18000050,0x18000052,0x18000054,0x18000056,
667                0x18000200,0x18000202,0x18000204,0x18000206,0x18000210,0x18000212,0x18000214,0x18000216,
668                0x18000240,0x18000242,0x18000244,0x18000246,0x18000250,0x18000252,0x18000254,0x18000256,
669                0x18000400,0x18000402,0x18000404,0x18000406,0x18000410,0x18000412,0x18000414,0x18000416,
670                0x18000440,0x18000442,0x18000444,0x18000446,0x18000450,0x18000452,0x18000454,0x18000456,
671                0x18000600,0x18000602,0x18000604,0x18000606,0x18000610,0x18000612,0x18000614,0x18000616,
672                0x18000640,0x18000642,0x18000644,0x18000646,0x18000650,0x18000652,0x18000654,0x18000656,
673                0x18000800,0x18000802,0x18000804,0x18000806,0x18000810,0x18000812,0x18000814,0x18000816,
674                0x18000840,0x18000842,0x18000844,0x18000846,0x18000850,0x18000852,0x18000854,0x18000856,
675                0x18000A00,0x18000A02,0x18000A04,0x18000A06,0x18000A10,0x18000A12,0x18000A14,0x18000A16,
676                0x18000A40,0x18000A42,0x18000A44,0x18000A46,0x18000A50,0x18000A52,0x18000A54,0x18000A56,
677                0x18000C00,0x18000C02,0x18000C04,0x18000C06,0x18000C10,0x18000C12,0x18000C14,0x18000C16,
678                0x18000C40,0x18000C42,0x18000C44,0x18000C46,0x18000C50,0x18000C52,0x18000C54,0x18000C56,
679                0x18000E00,0x18000E02,0x18000E04,0x18000E06,0x18000E10,0x18000E12,0x18000E14,0x18000E16,
680                0x18000E40,0x18000E42,0x18000E44,0x18000E46,0x18000E50,0x18000E52,0x18000E54,0x18000E56,
681                0x18100000,0x18100002,0x18100004,0x18100006,0x18100010,0x18100012,0x18100014,0x18100016,
682                0x18100040,0x18100042,0x18100044,0x18100046,0x18100050,0x18100052,0x18100054,0x18100056,
683                0x18100200,0x18100202,0x18100204,0x18100206,0x18100210,0x18100212,0x18100214,0x18100216,
684                0x18100240,0x18100242,0x18100244,0x18100246,0x18100250,0x18100252,0x18100254,0x18100256,
685                0x18100400,0x18100402,0x18100404,0x18100406,0x18100410,0x18100412,0x18100414,0x18100416,
686                0x18100440,0x18100442,0x18100444,0x18100446,0x18100450,0x18100452,0x18100454,0x18100456,
687                0x18100600,0x18100602,0x18100604,0x18100606,0x18100610,0x18100612,0x18100614,0x18100616,
688                0x18100640,0x18100642,0x18100644,0x18100646,0x18100650,0x18100652,0x18100654,0x18100656,
689                0x18100800,0x18100802,0x18100804,0x18100806,0x18100810,0x18100812,0x18100814,0x18100816,
690                0x18100840,0x18100842,0x18100844,0x18100846,0x18100850,0x18100852,0x18100854,0x18100856,
691                0x18100A00,0x18100A02,0x18100A04,0x18100A06,0x18100A10,0x18100A12,0x18100A14,0x18100A16,
692                0x18100A40,0x18100A42,0x18100A44,0x18100A46,0x18100A50,0x18100A52,0x18100A54,0x18100A56,
693                0x18100C00,0x18100C02,0x18100C04,0x18100C06,0x18100C10,0x18100C12,0x18100C14,0x18100C16,
694                0x18100C40,0x18100C42,0x18100C44,0x18100C46,0x18100C50,0x18100C52,0x18100C54,0x18100C56,
695                0x18100E00,0x18100E02,0x18100E04,0x18100E06,0x18100E10,0x18100E12,0x18100E14,0x18100E16,
696                0x18100E40,0x18100E42,0x18100E44,0x18100E46,0x18100E50,0x18100E52,0x18100E54,0x18100E56,
697                0x18200000,0x18200002,0x18200004,0x18200006,0x18200010,0x18200012,0x18200014,0x18200016,
698                0x18200040,0x18200042,0x18200044,0x18200046,0x18200050,0x18200052,0x18200054,0x18200056,
699                0x18200200,0x18200202,0x18200204,0x18200206,0x18200210,0x18200212,0x18200214,0x18200216,
700                0x18200240,0x18200242,0x18200244,0x18200246,0x18200250,0x18200252,0x18200254,0x18200256,
701                0x18200400,0x18200402,0x18200404,0x18200406,0x18200410,0x18200412,0x18200414,0x18200416,
702                0x18200440,0x18200442,0x18200444,0x18200446,0x18200450,0x18200452,0x18200454,0x18200456,
703                0x18200600,0x18200602,0x18200604,0x18200606,0x18200610,0x18200612,0x18200614,0x18200616,
704                0x18200640,0x18200642,0x18200644,0x18200646,0x18200650,0x18200652,0x18200654,0x18200656,
705                0x18200800,0x18200802,0x18200804,0x18200806,0x18200810,0x18200812,0x18200814,0x18200816,
706                0x18200840,0x18200842,0x18200844,0x18200846,0x18200850,0x18200852,0x18200854,0x18200856,
707                0x18200A00,0x18200A02,0x18200A04,0x18200A06,0x18200A10,0x18200A12,0x18200A14,0x18200A16,
708                0x18200A40,0x18200A42,0x18200A44,0x18200A46,0x18200A50,0x18200A52,0x18200A54,0x18200A56,
709                0x18200C00,0x18200C02,0x18200C04,0x18200C06,0x18200C10,0x18200C12,0x18200C14,0x18200C16,
710                0x18200C40,0x18200C42,0x18200C44,0x18200C46,0x18200C50,0x18200C52,0x18200C54,0x18200C56,
711                0x18200E00,0x18200E02,0x18200E04,0x18200E06,0x18200E10,0x18200E12,0x18200E14,0x18200E16,
712                0x18200E40,0x18200E42,0x18200E44,0x18200E46,0x18200E50,0x18200E52,0x18200E54,0x18200E56,
713                0x18300000,0x18300002,0x18300004,0x18300006,0x18300010,0x18300012,0x18300014,0x18300016,
714                0x18300040,0x18300042,0x18300044,0x18300046,0x18300050,0x18300052,0x18300054,0x18300056,
715                0x18300200,0x18300202,0x18300204,0x18300206,0x18300210,0x18300212,0x18300214,0x18300216,
716                0x18300240,0x18300242,0x18300244,0x18300246,0x18300250,0x18300252,0x18300254,0x18300256,
717                0x18300400,0x18300402,0x18300404,0x18300406,0x18300410,0x18300412,0x18300414,0x18300416,
718                0x18300440,0x18300442,0x18300444,0x18300446,0x18300450,0x18300452,0x18300454,0x18300456,
719                0x18300600,0x18300602,0x18300604,0x18300606,0x18300610,0x18300612,0x18300614,0x18300616,
720                0x18300640,0x18300642,0x18300644,0x18300646,0x18300650,0x18300652,0x18300654,0x18300656,
721                0x18300800,0x18300802,0x18300804,0x18300806,0x18300810,0x18300812,0x18300814,0x18300816,
722                0x18300840,0x18300842,0x18300844,0x18300846,0x18300850,0x18300852,0x18300854,0x18300856,
723                0x18300A00,0x18300A02,0x18300A04,0x18300A06,0x18300A10,0x18300A12,0x18300A14,0x18300A16,
724                0x18300A40,0x18300A42,0x18300A44,0x18300A46,0x18300A50,0x18300A52,0x18300A54,0x18300A56,
725                0x18300C00,0x18300C02,0x18300C04,0x18300C06,0x18300C10,0x18300C12,0x18300C14,0x18300C16,
726                0x18300C40,0x18300C42,0x18300C44,0x18300C46,0x18300C50,0x18300C52,0x18300C54,0x18300C56,
727                0x18300E00,0x18300E02,0x18300E04,0x18300E06,0x18300E10,0x18300E12,0x18300E14,0x18300E16,
728                0x18300E40,0x18300E42,0x18300E44,0x18300E46,0x18300E50,0x18300E52,0x18300E54,0x18300E56,
729                0x18400000,0x18400002,0x18400004,0x18400006,0x18400010,0x18400012,0x18400014,0x18400016,
730                0x18400040,0x18400042,0x18400044,0x18400046,0x18400050,0x18400052,0x18400054,0x18400056,
731                0x18400200,0x18400202,0x18400204,0x18400206,0x18400210,0x18400212,0x18400214,0x18400216,
732                0x18400240,0x18400242,0x18400244,0x18400246,0x18400250,0x18400252,0x18400254,0x18400256,
733                0x18400400,0x18400402,0x18400404,0x18400406,0x18400410,0x18400412,0x18400414,0x18400416,
734                0x18400440,0x18400442,0x18400444,0x18400446,0x18400450,0x18400452,0x18400454,0x18400456,
735                0x18400600,0x18400602,0x18400604,0x18400606,0x18400610,0x18400612,0x18400614,0x18400616,
736                0x18400640,0x18400642,0x18400644,0x18400646,0x18400650,0x18400652,0x18400654,0x18400656,
737                0x18400800,0x18400802,0x18400804,0x18400806,0x18400810,0x18400812,0x18400814,0x18400816,
738                0x18400840,0x18400842,0x18400844,0x18400846,0x18400850,0x18400852,0x18400854,0x18400856,
739                0x18400A00,0x18400A02,0x18400A04,0x18400A06,0x18400A10,0x18400A12,0x18400A14,0x18400A16,
740                0x18400A40,0x18400A42,0x18400A44,0x18400A46,0x18400A50,0x18400A52,0x18400A54,0x18400A56,
741                0x18400C00,0x18400C02,0x18400C04,0x18400C06,0x18400C10,0x18400C12,0x18400C14,0x18400C16,
742                0x18400C40,0x18400C42,0x18400C44,0x18400C46,0x18400C50,0x18400C52,0x18400C54,0x18400C56,
743                0x18400E00,0x18400E02,0x18400E04,0x18400E06,0x18400E10,0x18400E12,0x18400E14,0x18400E16,
744                0x18400E40,0x18400E42,0x18400E44,0x18400E46,0x18400E50,0x18400E52,0x18400E54,0x18400E56,
745                0x18500000,0x18500002,0x18500004,0x18500006,0x18500010,0x18500012,0x18500014,0x18500016,
746                0x18500040,0x18500042,0x18500044,0x18500046,0x18500050,0x18500052,0x18500054,0x18500056,
747                0x18500200,0x18500202,0x18500204,0x18500206,0x18500210,0x18500212,0x18500214,0x18500216,
748                0x18500240,0x18500242,0x18500244,0x18500246,0x18500250,0x18500252,0x18500254,0x18500256,
749                0x18500400,0x18500402,0x18500404,0x18500406,0x18500410,0x18500412,0x18500414,0x18500416,
750                0x18500440,0x18500442,0x18500444,0x18500446,0x18500450,0x18500452,0x18500454,0x18500456,
751                0x18500600,0x18500602,0x18500604,0x18500606,0x18500610,0x18500612,0x18500614,0x18500616,
752                0x18500640,0x18500642,0x18500644,0x18500646,0x18500650,0x18500652,0x18500654,0x18500656,
753                0x18500800,0x18500802,0x18500804,0x18500806,0x18500810,0x18500812,0x18500814,0x18500816,
754                0x18500840,0x18500842,0x18500844,0x18500846,0x18500850,0x18500852,0x18500854,0x18500856,
755                0x18500A00,0x18500A02,0x18500A04,0x18500A06,0x18500A10,0x18500A12,0x18500A14,0x18500A16,
756                0x18500A40,0x18500A42,0x18500A44,0x18500A46,0x18500A50,0x18500A52,0x18500A54,0x18500A56,
757                0x18500C00,0x18500C02,0x18500C04,0x18500C06,0x18500C10,0x18500C12,0x18500C14,0x18500C16,
758                0x18500C40,0x18500C42,0x18500C44,0x18500C46,0x18500C50,0x18500C52,0x18500C54,0x18500C56,
759                0x18500E00,0x18500E02,0x18500E04,0x18500E06,0x18500E10,0x18500E12,0x18500E14,0x18500E16,
760                0x18500E40,0x18500E42,0x18500E44,0x18500E46,0x18500E50,0x18500E52,0x18500E54,0x18500E56,
761                0x18600000,0x18600002,0x18600004,0x18600006,0x18600010,0x18600012,0x18600014,0x18600016,
762                0x18600040,0x18600042,0x18600044,0x18600046,0x18600050,0x18600052,0x18600054,0x18600056,
763                0x18600200,0x18600202,0x18600204,0x18600206,0x18600210,0x18600212,0x18600214,0x18600216,
764                0x18600240,0x18600242,0x18600244,0x18600246,0x18600250,0x18600252,0x18600254,0x18600256,
765                0x18600400,0x18600402,0x18600404,0x18600406,0x18600410,0x18600412,0x18600414,0x18600416,
766                0x18600440,0x18600442,0x18600444,0x18600446,0x18600450,0x18600452,0x18600454,0x18600456,
767                0x18600600,0x18600602,0x18600604,0x18600606,0x18600610,0x18600612,0x18600614,0x18600616,
768                0x18600640,0x18600642,0x18600644,0x18600646,0x18600650,0x18600652,0x18600654,0x18600656,
769                0x18600800,0x18600802,0x18600804,0x18600806,0x18600810,0x18600812,0x18600814,0x18600816,
770                0x18600840,0x18600842,0x18600844,0x18600846,0x18600850,0x18600852,0x18600854,0x18600856,
771                0x18600A00,0x18600A02,0x18600A04,0x18600A06,0x18600A10,0x18600A12,0x18600A14,0x18600A16,
772                0x18600A40,0x18600A42,0x18600A44,0x18600A46,0x18600A50,0x18600A52,0x18600A54,0x18600A56,
773                0x18600C00,0x18600C02,0x18600C04,0x18600C06,0x18600C10,0x18600C12,0x18600C14,0x18600C16,
774                0x18600C40,0x18600C42,0x18600C44,0x18600C46,0x18600C50,0x18600C52,0x18600C54,0x18600C56,
775                0x18600E00,0x18600E02,0x18600E04,0x18600E06,0x18600E10,0x18600E12,0x18600E14,0x18600E16,
776                0x18600E40,0x18600E42,0x18600E44,0x18600E46,0x18600E50,0x18600E52,0x18600E54,0x18600E56,
777                0x18700000,0x18700002,0x18700004,0x18700006,0x18700010,0x18700012,0x18700014,0x18700016,
778                0x18700040,0x18700042,0x18700044,0x18700046,0x18700050,0x18700052,0x18700054,0x18700056,
779                0x18700200,0x18700202,0x18700204,0x18700206,0x18700210,0x18700212,0x18700214,0x18700216,
780                0x18700240,0x18700242,0x18700244,0x18700246,0x18700250,0x18700252,0x18700254,0x18700256,
781                0x18700400,0x18700402,0x18700404,0x18700406,0x18700410,0x18700412,0x18700414,0x18700416,
782                0x18700440,0x18700442,0x18700444,0x18700446,0x18700450,0x18700452,0x18700454,0x18700456,
783                0x18700600,0x18700602,0x18700604,0x18700606,0x18700610,0x18700612,0x18700614,0x18700616,
784                0x18700640,0x18700642,0x18700644,0x18700646,0x18700650,0x18700652,0x18700654,0x18700656,
785                0x18700800,0x18700802,0x18700804,0x18700806,0x18700810,0x18700812,0x18700814,0x18700816,
786                0x18700840,0x18700842,0x18700844,0x18700846,0x18700850,0x18700852,0x18700854,0x18700856,
787                0x18700A00,0x18700A02,0x18700A04,0x18700A06,0x18700A10,0x18700A12,0x18700A14,0x18700A16,
788                0x18700A40,0x18700A42,0x18700A44,0x18700A46,0x18700A50,0x18700A52,0x18700A54,0x18700A56,
789                0x18700C00,0x18700C02,0x18700C04,0x18700C06,0x18700C10,0x18700C12,0x18700C14,0x18700C16,
790                0x18700C40,0x18700C42,0x18700C44,0x18700C46,0x18700C50,0x18700C52,0x18700C54,0x18700C56,
791                0x18700E00,0x18700E02,0x18700E04,0x18700E06,0x18700E10,0x18700E12,0x18700E14,0x18700E16,
792                0x18700E40,0x18700E42,0x18700E44,0x18700E46,0x18700E50,0x18700E52,0x18700E54,0x18700E56};
793            UInt32[] maskQ20 = new UInt32[64] {
794                0x00000000,0x00000001,0x00000002,0x00000003,0x00000200,0x00000201,0x00000202,0x00000203,
795                0x00004000,0x00004001,0x00004002,0x00004003,0x00004200,0x00004201,0x00004202,0x00004203,
796                0x00200000,0x00200001,0x00200002,0x00200003,0x00200200,0x00200201,0x00200202,0x00200203,
797                0x00204000,0x00204001,0x00204002,0x00204003,0x00204200,0x00204201,0x00204202,0x00204203,
798                0x00800000,0x00800001,0x00800002,0x00800003,0x00800200,0x00800201,0x00800202,0x00800203,
799                0x00804000,0x00804001,0x00804002,0x00804003,0x00804200,0x00804201,0x00804202,0x00804203,
800                0x00A00000,0x00A00001,0x00A00002,0x00A00003,0x00A00200,0x00A00201,0x00A00202,0x00A00203,
801                0x00A04000,0x00A04001,0x00A04002,0x00A04003,0x00A04200,0x00A04201,0x00A04202,0x00A04203};
802            UInt32[] maskQ10 = new UInt32[8] { 0x00000000, 0x00000400, 0x01000000, 0x01000400, 0x04000000, 0x04000400, 0x05000000, 0x05000400 };
803            UInt32 hQ3p, hQ4p, hQ14p, constxx, constxxx;
804            UInt32[] maskQ14 = new UInt32[512]
805                {
806                0x00000000,0x00000001,0x00000002,0x00000003,0x00000004,0x00000005,0x00000006,
807                0x00000007,0x00000010,0x00000011,0x00000012,0x00000013,0x00000014,0x00000015,0x00000016,
808                0x00000017,0x00000020,0x00000021,0x00000022,0x00000023,0x00000024,0x00000025,0x00000026,
809                0x00000027,0x00000030,0x00000031,0x00000032,0x00000033,0x00000034,0x00000035,0x00000036,
810                0x00000037,0x00000040,0x00000041,0x00000042,0x00000043,0x00000044,0x00000045,0x00000046,
811                0x00000047,0x00000050,0x00000051,0x00000052,0x00000053,0x00000054,0x00000055,0x00000056,
812                0x00000057,0x00000060,0x00000061,0x00000062,0x00000063,0x00000064,0x00000065,0x00000066,
813                0x00000067,0x00000070,0x00000071,0x00000072,0x00000073,0x00000074,0x00000075,0x00000076,
814                0x00000077,0x04000000,0x04000001,0x04000002,0x04000003,0x04000004,0x04000005,0x04000006,
815                0x04000007,0x04000010,0x04000011,0x04000012,0x04000013,0x04000014,0x04000015,0x04000016,
816                0x04000017,0x04000020,0x04000021,0x04000022,0x04000023,0x04000024,0x04000025,0x04000026,
817                0x04000027,0x04000030,0x04000031,0x04000032,0x04000033,0x04000034,0x04000035,0x04000036,
818                0x04000037,0x04000040,0x04000041,0x04000042,0x04000043,0x04000044,0x04000045,0x04000046,
819                0x04000047,0x04000050,0x04000051,0x04000052,0x04000053,0x04000054,0x04000055,0x04000056,
820                0x04000057,0x04000060,0x04000061,0x04000062,0x04000063,0x04000064,0x04000065,0x04000066,
821                0x04000067,0x04000070,0x04000071,0x04000072,0x04000073,0x04000074,0x04000075,0x04000076,
822                0x04000077,0x08000000,0x08000001,0x08000002,0x08000003,0x08000004,0x08000005,0x08000006,
823                0x08000007,0x08000010,0x08000011,0x08000012,0x08000013,0x08000014,0x08000015,0x08000016,
824                0x08000017,0x08000020,0x08000021,0x08000022,0x08000023,0x08000024,0x08000025,0x08000026,
825                0x08000027,0x08000030,0x08000031,0x08000032,0x08000033,0x08000034,0x08000035,0x08000036,
826                0x08000037,0x08000040,0x08000041,0x08000042,0x08000043,0x08000044,0x08000045,0x08000046,
827                0x08000047,0x08000050,0x08000051,0x08000052,0x08000053,0x08000054,0x08000055,0x08000056,
828                0x08000057,0x08000060,0x08000061,0x08000062,0x08000063,0x08000064,0x08000065,0x08000066,
829                0x08000067,0x08000070,0x08000071,0x08000072,0x08000073,0x08000074,0x08000075,0x08000076,
830                0x08000077,0x0C000000,0x0C000001,0x0C000002,0x0C000003,0x0C000004,0x0C000005,0x0C000006,
831                0x0C000007,0x0C000010,0x0C000011,0x0C000012,0x0C000013,0x0C000014,0x0C000015,0x0C000016,
832                0x0C000017,0x0C000020,0x0C000021,0x0C000022,0x0C000023,0x0C000024,0x0C000025,0x0C000026,
833                0x0C000027,0x0C000030,0x0C000031,0x0C000032,0x0C000033,0x0C000034,0x0C000035,0x0C000036,
834                0x0C000037,0x0C000040,0x0C000041,0x0C000042,0x0C000043,0x0C000044,0x0C000045,0x0C000046,
835                0x0C000047,0x0C000050,0x0C000051,0x0C000052,0x0C000053,0x0C000054,0x0C000055,0x0C000056,
836                0x0C000057,0x0C000060,0x0C000061,0x0C000062,0x0C000063,0x0C000064,0x0C000065,0x0C000066,
837                0x0C000067,0x0C000070,0x0C000071,0x0C000072,0x0C000073,0x0C000074,0x0C000075,0x0C000076,
838                0x0C000077,0x10000000,0x10000001,0x10000002,0x10000003,0x10000004,0x10000005,0x10000006,
839                0x10000007,0x10000010,0x10000011,0x10000012,0x10000013,0x10000014,0x10000015,0x10000016,
840                0x10000017,0x10000020,0x10000021,0x10000022,0x10000023,0x10000024,0x10000025,0x10000026,
841                0x10000027,0x10000030,0x10000031,0x10000032,0x10000033,0x10000034,0x10000035,0x10000036,
842                0x10000037,0x10000040,0x10000041,0x10000042,0x10000043,0x10000044,0x10000045,0x10000046,
843                0x10000047,0x10000050,0x10000051,0x10000052,0x10000053,0x10000054,0x10000055,0x10000056,
844                0x10000057,0x10000060,0x10000061,0x10000062,0x10000063,0x10000064,0x10000065,0x10000066,
845                0x10000067,0x10000070,0x10000071,0x10000072,0x10000073,0x10000074,0x10000075,0x10000076,
846                0x10000077,0x14000000,0x14000001,0x14000002,0x14000003,0x14000004,0x14000005,0x14000006,
847                0x14000007,0x14000010,0x14000011,0x14000012,0x14000013,0x14000014,0x14000015,0x14000016,
848                0x14000017,0x14000020,0x14000021,0x14000022,0x14000023,0x14000024,0x14000025,0x14000026,
849                0x14000027,0x14000030,0x14000031,0x14000032,0x14000033,0x14000034,0x14000035,0x14000036,
850                0x14000037,0x14000040,0x14000041,0x14000042,0x14000043,0x14000044,0x14000045,0x14000046,
851                0x14000047,0x14000050,0x14000051,0x14000052,0x14000053,0x14000054,0x14000055,0x14000056,
852                0x14000057,0x14000060,0x14000061,0x14000062,0x14000063,0x14000064,0x14000065,0x14000066,
853                0x14000067,0x14000070,0x14000071,0x14000072,0x14000073,0x14000074,0x14000075,0x14000076,
854                0x14000077,0x18000000,0x18000001,0x18000002,0x18000003,0x18000004,0x18000005,0x18000006,
855                0x18000007,0x18000010,0x18000011,0x18000012,0x18000013,0x18000014,0x18000015,0x18000016,
856                0x18000017,0x18000020,0x18000021,0x18000022,0x18000023,0x18000024,0x18000025,0x18000026,
857                0x18000027,0x18000030,0x18000031,0x18000032,0x18000033,0x18000034,0x18000035,0x18000036,
858                0x18000037,0x18000040,0x18000041,0x18000042,0x18000043,0x18000044,0x18000045,0x18000046,
859                0x18000047,0x18000050,0x18000051,0x18000052,0x18000053,0x18000054,0x18000055,0x18000056,
860                0x18000057,0x18000060,0x18000061,0x18000062,0x18000063,0x18000064,0x18000065,0x18000066,
861                0x18000067,0x18000070,0x18000071,0x18000072,0x18000073,0x18000074,0x18000075,0x18000076,
862                0x18000077,0x1C000000,0x1C000001,0x1C000002,0x1C000003,0x1C000004,0x1C000005,0x1C000006,
863                0x1C000007,0x1C000010,0x1C000011,0x1C000012,0x1C000013,0x1C000014,0x1C000015,0x1C000016,
864                0x1C000017,0x1C000020,0x1C000021,0x1C000022,0x1C000023,0x1C000024,0x1C000025,0x1C000026,
865                0x1C000027,0x1C000030,0x1C000031,0x1C000032,0x1C000033,0x1C000034,0x1C000035,0x1C000036,
866                0x1C000037,0x1C000040,0x1C000041,0x1C000042,0x1C000043,0x1C000044,0x1C000045,0x1C000046,
867                0x1C000047,0x1C000050,0x1C000051,0x1C000052,0x1C000053,0x1C000054,0x1C000055,0x1C000056,
868                0x1C000057,0x1C000060,0x1C000061,0x1C000062,0x1C000063,0x1C000064,0x1C000065,0x1C000066,
869                0x1C000067,0x1C000070,0x1C000071,0x1C000072,0x1C000073,0x1C000074,0x1C000075,0x1C000076,
870                0x1C000077
871                };
872
873            UInt32 B0a, B0b;
874            UInt32 B1a, B1b, B1c, B1d, B1e, B1f;
875            UInt32 B2a;
876            UInt32 B3a, B3b, B3c, B3d, B3e, B3f, B3g, B3h, B3i, B3j, B3k, B3l, B3m, B3n;
877            UInt32 B01a;
878            UInt32 B02a, B02b;
879
880            QM3 = IHV0[0] = HIHV0[0] = 0x67452301;
881            QM0 = IHV0[1] = HIHV0[1] = 0xefcdab89;
882            QM1 = IHV0[2] = HIHV0[2] = 0x98badcfe;
883            QM2 = IHV0[3] = HIHV0[3] = 0x10325476;
884
885
886
887            //pocet_kolizi = 0;
888            cas1 = cas2 = cas3 = cas4 = cas5 = 0;
889            while (!IsStopped)
890            {
891                MatchProgress = 1;
892                /* a1 */
893                Q[1] = rng();
894                /* d1 */
895                //Q[ 2] = rng();
896                /* c1 */
897                // Q[3]          = .... .... .vvv 0vvv vvvv 0vvv v0.. ....
898                // pozice s RNG  = **** **** **** .*** **** .*** *.** ****  0xfff7f7bf
899                // pozice s 0    = .... .... .... *... .... *... .*.. ....  0x00080840   
900                // pozice s 1    = .... .... .... .... .... .... .... ....  0x00000000
901                Q[3] = rng() & 0xfff7f7bf;
902
903                /* b1 */
904                // Q[ 4]         = 1... .... 0^^^ 1^^^ ^^^^ 1^^^ ^011 ....
905                // pozice s RNG  = .*** **** .... .... .... .... .... ****  0x7f00000f
906                // pozice s 0    = .... .... *... .... .... .... .*.. ....  0x00800040
907                // pozice s 1    = *... .... .... *... .... *... ..** ....  0x80080830
908                // pozice s Q[3] = .... .... .*** .*** **** .*** *... ....  0x0077f780
909                Q[4] = (rng() & 0x7f00000f) + 0x80080830 + (Q[3] & 0x0077f780);
910
911                /* a2 - I set bit 2 and 4 to zero, not necessary for Q14 tunnel */
912                // Q[ 5]         = 1000 100v 0100 0000 0000 0000 0010 0101
913                // pozice s RNG  = .... ...* .... .... .... .... .... ....  0x01000000
914                // pozice s 0    = .*** .**. *.** **** **** **** **.* *.*.  0x76bfffda
915                // pozice s 1    = *... *... .*.. .... .... .... ..*. .*.*  0x88400025
916                Q[5] = (rng() & 0x01000000) + 0x88400025;
917
918                /* d2 - I set bit 2 and 4 to zero, not necessary for Q14 tunnel*/
919                // Q[ 6]         = 0000 001^ 0111 1111 1011 1100 0100 0001
920                // pozice s RNG  = .... .... .... .... .... .... .... ....  0x00000000
921                // pozice s 0    = **** **.. *... .... .*.. ..** *.** ***.  0xfc8043be
922                // pozice s 1    = .... ..*. .*** **** *.** **.. .*.. ...*  0x027fbc41
923                // pozice s Q[ 5]= .... ...* .... .... .... .... .... ....  0x01000000
924                Q[6] = 0x027fbc41 + (Q[5] & 0x01000000);
925
926                /* c2 */
927                // Q[ 7]         = 0000 0011 1111 1110 1111 1000 0010 0000
928                // pozice   RNG  = .... .... .... .... .... .... .... ....  0x00000000
929                // pozice   NUL  = **** **.. .... ...* .... .*** **.* ****  0xfc0107df
930                // pozice   ONE  = .... ..** **** ***. **** *... ..*. ....  0x03fef820
931                Q[7] = 0x03fef820;
932                /* b2 */
933                // Q[ 8]         = 0000 0001 1..1 0001 0.0v 0101 0100 0000
934                // pozice   RNG  = .... .... .**. .... .*.* .... .... ....  0x00605000
935                // pozice   NUL  = **** ***. .... ***. *.*. *.*. *.** ****  0xfe0eaabf
936                // pozice   ONE  = .... ...* *..* ...* .... .*.* .*.. ....  0x01910540
937                Q[8] = (rng() & 0x00605000) + 0x01910540;
938
939                /* a3 */
940                // Q[ 9]         = 1111 1011 ...1 0000 0.1^ 1111 0011 1101
941                // pozice   RNG  = .... .... ***. .... .*.. .... .... ....  0x00e04000
942                // pozice   NUL  = .... .*.. .... **** *... .... **.. ..*.  0x040f80c2
943                // pozice   ONE  = **** *.** ...* .... ..*. **** ..** **.*  0xfb102f3d
944                // pozice = Q[ 8]= .... .... .... .... ...* .... .... ....  0x00001000
945                Q[9] = (rng() & 0x00e04000) + 0xfb102f3d + (Q[8] & 0x00001000);
946
947                /*  d3 ------ Q9 tunnel , bits 24,23,22*/
948                // Q[10]         = 0111 .... 0001 1111 1v01 ...0 01.. ..00
949                // pozice   RNG  = .... **** .... .... .*.. ***. ..** **..  0x0f004e3c
950                // pozice   NUL  = *... .... ***. .... ..*. ...* *... ..**  0x80e02183
951                // pozice   ONE  = .*** .... ...* **** *..* .... .*.. ....  0x701f9040
952                Q[10] = (rng() & 0x0f004e3c) + 0x701f9040;
953
954                /*  c3  ------ Q9 tunnel , bits 24,23,22*/
955                //------------ Q10 tunnel , bits 11,25,27
956                // Q[11]         = 0010 .0v0 111. 0001 1^00 .0.0 11.. ..10
957                // pozice   RNG  = .... *.*. ...* .... .... *.*. ..** **..  0x0a100a3c
958                // pozice   NUL  = **.* .*.* .... ***. ..** .*.* .... ...*  0xd50e3501   
959                // pozice   ONE  = ..*. .... ***. ...* *... .... **.. ..*.  0x20e180c2
960                // pozice = Q[10]= .... .... .... .... .*.. .... .... ....  0x00004000
961                Q[11] = (rng() & 0x0a100a3c) + 0x20e180c2 + (Q[10] & 0x00004000);
962
963                /*  b3*/
964                // Q[12]         = 000. ..^^ .... 1000 0001 ...1 0... ....
965                // pozice   RNG  = ...* **.. **** .... .... ***. .*** ****  0x1cf00e7f
966                // pozice   NUL  = ***. .... .... .*** ***. .... *... ....  0xe007e080
967                // pozice   ONE  = .... .... .... *... ...* ...* .... ....  0x00081100
968                // pozice = Q[11]= .... ..** .... .... .... .... .... ....  0x03000000
969                Q[12] = (rng() & 0x1cf00e7f) + 0x00081100 + (Q[11] & 0x03000000);
970
971                /* a4 */
972                // Q[13]         = 01.. ..01 .... 1111 111. ...0 0... 1...
973                // pozice   RNG  = ..** **.. **** .... ...* ***. .*** .***  0x3cf01e77
974                // pozice   NUL  = *... ..*. .... .... .... ...* *... ....  0x82000180
975                // pozice   ONE  = .*.. ...* .... **** ***. .... .... *...  0x410fe008
976                Q[13] = (rng() & 0x3cf01e77) + 0x410fe008;
977
978                /* d4 */
979                // Q[14]         = 000. ..00 .... 1011 111. ...1 1... 1...
980                // pozice   RNG  = ...* **.. **** .... ...* ***. .*** .***  0x1cf01e77
981                // pozice   NUL  = ***. ..** .... .*.. .... .... .... ....  0xe3040000
982                // pozice   ONE  = .... .... .... *.** ***. ...* *... *...  0x000be188
983                Q[14] = (rng() & 0x1cf01e77) + 0x000be188;
984
985                /* c4 --- Q3x6 tunnel , bits 29,28,27,7,6,5,3,2,1*/
986                // Q[15]         = v110 0001 ..V. .... 10.. .... .000 0000
987                // pozice   RNG  = *... .... **** **** ..** **** *... ....  0x80ff3f80
988                // pozice   NUL  = ...* ***. .... .... .*.. .... .*** ****  0x1e00407f
989                // pozice   ONE  = .**. ...* .... .... *... .... .... ....  0x61008000
990                Q[15] = (rng() & 0x80ff3f80) + 0x61008000;
991                bit_Q15_32 = Q[15] & longmask[32];
992
993                /* b4 --- Q3x6 tunnel , bits 29,28,27,7,6,5,3,2,1*/
994                // Q[16]         = ^010 00.. ..A. .... v... .... .000 v000
995                // pozice   RNG  = .... ..** **.* **** **** **** *... *...  0x03dfff88
996                // pozice   NUL  = .*.* **.. .... .... .... .... .*** .***  0x5c000077
997                // pozice   ONE  = ..*. .... .... .... .... .... .... ....  0x20000000
998                // pozice   Q[15]= *... .... .... .... .... .... .... ....  0x80000000
999                // pozice ~ Q[15]= .... .... ..*. .... .... .... .... ....  0x00200000
1000                //Q[16] = (rng() & 0x03dfff88) + 0x20000000 + (Q[15] & 0x80000000) + ((~Q[15]) & 0x00200000);
1001
1002                Q[16] = (rng() & 0x03dfff88) + 0x20000000 + (Q[15] & 0x80000000) + ((~Q[15]) & 0x00200000);
1003                // Q[17]         = ^1v. .... .... ..0. ^... .... .... ^...
1004                // pozice   RNG  = ..** **** **** **.* .*** **** **** .***  0x3ffd7ff7
1005                // pozice   NUL  = .... .... .... ..*. .... .... .... ....  0x00020000
1006                // pozice   ONE  = .*.. .... .... .... .... .... .... ....  0x40000000
1007                // pozice   Q[16]= *... .... .... .... *... .... .... *...  0x80008008
1008                Q[17] = (rng() & 0x3ffd7ff7) + 0x40000000 + (Q[16] & 0x80008008);
1009
1010                x[1] = RR(Q[17] - Q[16], 5) - G(Q[16], Q[15], Q[14]) - Q[13] - 0xf61e2562;
1011                Q[2] = Q[1] + RL(F(Q[1], QM0, QM1) + QM2 + x[1] + 0xe8c7b756, 12);
1012
1013                x[6] = RR(Q[7] - Q[6], 17) - F(Q[6], Q[5], Q[4]) - Q[3] - 0xa8304613;
1014                x[11] = RR(Q[12] - Q[11], 22) - F(Q[11], Q[10], Q[9]) - Q[8] - 0x895cd7be;
1015                x[0] = RR(Q[1] - QM0, 7) - F(QM0, QM1, QM2) - QM3 - 0xd76aa478;
1016                x[5] = RR(Q[6] - Q[5], 12) - F(Q[5], Q[4], Q[3]) - Q[2] - 0x4787c62a;
1017                x[10] = RR(Q[11] - Q[10], 17) - F(Q[10], Q[9], Q[8]) - Q[7] - 0xffff5bb1;
1018                x[15] = RR(Q[16] - Q[15], 22) - F(Q[15], Q[14], Q[13]) - Q[12] - 0x49b40821;
1019                x[4] = RR(Q[5] - Q[4], 7) - F(Q[4], Q[3], Q[2]) - Q[1] - 0xf57c0faf;
1020
1021                Q[18] = Q[17] + RL(G(Q[17], Q[16], Q[15]) + Q[14] + x[6] + 0xc040b340, 9);
1022                if (((Q[18] ^ Q[17]) & 0xa0020000) != 0x00020000) { continue; }
1023                zavorka_Q19 = G(Q[18], Q[17], Q[16]) + Q[15] + x[11] + 0x265e5a51;
1024                if ((zavorka_Q19 & 0x0003fff8) == 0x0003fff8) { continue; }
1025                Q[19] = Q[18] + RL(zavorka_Q19, 14);
1026                if (((Q[19] ^ Q[18]) & 0x80020000) != 0x00020000) { continue; }
1027                zavorka_Q20 = G(Q[19], Q[18], Q[17]) + Q[16] + x[0] + 0xe9b6c7aa;
1028                if ((zavorka_Q20 & 0xe0000000) == 0) { continue; }
1029                Q[20] = Q[19] + RL(zavorka_Q20, 20);
1030                if ((Q[20] & longmask[32]) != bit_Q15_32) { continue; }
1031                Q[21] = Q[20] + RL(G(Q[20], Q[19], Q[18]) + Q[17] + x[5] + 0xd62f105d, 5);
1032                if (((Q[21] ^ Q[20]) & 0x80020000) != 0) { continue; }
1033                Q[22] = Q[21] + RL(G(Q[21], Q[20], Q[19]) + Q[18] + x[10] + 0x2441453, 9);
1034                if ((Q[22] & longmask[32]) != bit_Q15_32) { continue; }
1035                zavorka_Q23 = G(Q[22], Q[21], Q[20]) + Q[19] + x[15] + 0xd8a1e681;
1036                if ((zavorka_Q23 & longmask[18]) != 0) { continue; }
1037                Q[23] = Q[22] + RL(zavorka_Q23, 14);
1038                if ((Q[23] & longmask[32]) != 0) { continue; }
1039                Q[24] = Q[23] + RL(G(Q[23], Q[22], Q[21]) + Q[20] + x[4] + 0xe7d3fbc8, 20);
1040                if ((Q[24] & longmask[32]) != longmask[32]) { continue; }
1041                //stat[14]++;if(stat[14]==0)Histat[14]++;
1042
1043                //tututu B0
1044                tempx4 = x[4]; tempx15 = x[15]; tempx1 = x[1];
1045                tempq3 = Q[3]; tempq4 = Q[4]; tempq14 = Q[14];
1046                tempq10 = Q[10]; tempq9 = Q[9]; tempq13 = Q[13]; tempq20 = Q[20]; tempq21 = Q[21];
1047                tempq6 = Q[6]; tempq16 = Q[16]; tempq17 = Q[17];
1048
1049                B0a = F(Q[8], Q[7], Q[6]) + Q[5] + 0x698098d8;
1050                B0b = Q[6] + 0x8b44f7af;
1051
1052
1053                for (Q10 = 0; Q10 < 8; Q10++)//3 bits
1054                {
1055                    if (IsStopped)
1056                        return 1;
1057
1058                    MatchProgress = 2;
1059
1060                    Q[10] = tempq10; Q[9] = tempq9; Q[13] = tempq13; x[4] = tempx4; x[15] = tempx15;
1061                    Q[20] = tempq20; Q[21] = tempq21;
1062
1063                    Q[10] = tempq10 ^ maskQ10[Q10];
1064                    x[10] = RR(Q[11] - Q[10], 17) - F(Q[10], Q[9], Q[8]) - Q[7] - 0xffff5bb1;
1065                    Q[22] = Q[21] + RL(G(Q[21], Q[20], Q[19]) + Q[18] + x[10] + 0x2441453, 9);
1066                    if ((Q[22] & longmask[32]) != bit_Q15_32) { continue; }
1067                    zavorka_Q23 = G(Q[22], Q[21], Q[20]) + Q[19] + x[15] + 0xd8a1e681;
1068                    if ((zavorka_Q23 & longmask[18]) != 0) { continue; }
1069                    Q[23] = Q[22] + RL(zavorka_Q23, 14);
1070                    if ((Q[23] & longmask[32]) != 0) { continue; }
1071                    Q[24] = Q[23] + RL(G(Q[23], Q[22], Q[21]) + Q[20] + x[4] + 0xe7d3fbc8, 20);
1072                    if ((Q[24] & longmask[32]) != longmask[32]) { continue; }
1073
1074                    B01a = x[10] + 0xbebfbc70;
1075
1076
1077                    for (Q20 = 0; Q20 < 64; Q20++)//6 bits, 64
1078                    {
1079                        if (IsStopped)
1080                            return 1;
1081
1082                        MatchProgress = 3;
1083
1084                        Q[3] = tempq3; Q[4] = tempq4; x[1] = tempx1; x[15] = tempx15;
1085                        Q[20] = tempq20 ^ maskQ20[Q20];
1086                        x[0] = RR(Q[20] - Q[19], 20) - G(Q[19], Q[18], Q[17]) - Q[16] - 0xe9b6c7aa;
1087                        Q[1] = QM0 + RL(F(QM0, QM1, QM2) + QM3 + x[0] + 0xd76aa478, 7);
1088                        Q[2] = Q[1] + RL(F(Q[1], QM0, QM1) + QM2 + x[1] + 0xe8c7b756, 12);
1089                        x[5] = RR(Q[6] - Q[5], 12) - F(Q[5], Q[4], Q[3]) - Q[2] - 0x4787c62a;
1090                        Q[21] = Q[20] + RL(G(Q[20], Q[19], Q[18]) + Q[17] + x[5] + 0xd62f105d, 5);//chybelo
1091                        if (((Q[21] ^ Q[20]) & 0x80020000) != 0) { continue; }
1092                        Q[22] = Q[21] + RL(G(Q[21], Q[20], Q[19]) + Q[18] + x[10] + 0x2441453, 9);
1093                        if ((Q[22] & longmask[32]) != bit_Q15_32) { continue; }
1094                        zavorka_Q23 = G(Q[22], Q[21], Q[20]) + Q[19] + x[15] + 0xd8a1e681;
1095                        if ((zavorka_Q23 & longmask[18]) != 0) { continue; }
1096                        Q[23] = Q[22] + RL(zavorka_Q23, 14);
1097                        if ((Q[23] & longmask[32]) != 0) { continue; }
1098                        x[4] = RR(Q[5] - Q[4], 7) - F(Q[4], Q[3], Q[2]) - Q[1] - 0xf57c0faf;
1099                        Q[24] = Q[23] + RL(G(Q[23], Q[22], Q[21]) + Q[20] + x[4] + 0xe7d3fbc8, 20);
1100                        if ((Q[24] & longmask[32]) != longmask[32]) { continue; }
1101
1102
1103                        B02a = B02a = x[0] + 0xeaa127fa;
1104                        B02b = x[0] + 0xf4292244;
1105
1106
1107
1108                        for (Q13 = 0; Q13 < 4096; Q13++)//12 bits
1109                        {
1110                            if (IsStopped)
1111                                return 1;
1112
1113                            MatchProgress = 4;
1114
1115                            Q[3] = tempq3; Q[4] = tempq4; Q[14] = tempq14;
1116                            Q[13] = tempq13 ^ maskQ13[Q13];
1117                            x[1] = RR(Q[17] - Q[16], 5) - G(Q[16], Q[15], Q[14]) - Q[13] - 0xf61e2562;
1118                            Q[2] = Q[1] + RL(F(Q[1], QM0, QM1) + QM2 + x[1] + 0xe8c7b756, 12);
1119                            x[5] = RR(Q[6] - Q[5], 12) - F(Q[5], Q[4], Q[3]) - Q[2] - 0x4787c62a;
1120                            Q[21] = Q[20] + RL(G(Q[20], Q[19], Q[18]) + Q[17] + x[5] + 0xd62f105d, 5);
1121                            if (((Q[21] ^ Q[20]) & 0x80020000) != 0) { continue; }//rovnou dve podminky
1122                            Q[22] = Q[21] + RL(G(Q[21], Q[20], Q[19]) + Q[18] + x[10] + 0x2441453, 9);
1123                            if ((Q[22] & longmask[32]) != bit_Q15_32) { continue; }//jedna podminka
1124                            x[15] = RR(Q[16] - Q[15], 22) - F(Q[15], Q[14], Q[13]) - Q[12] - 0x49b40821;
1125                            zavorka_Q23 = G(Q[22], Q[21], Q[20]) + Q[19] + x[15] + 0xd8a1e681;
1126                            if ((zavorka_Q23 & longmask[18]) != 0) { continue; }
1127                            Q[23] = Q[22] + RL(zavorka_Q23, 14);
1128                            if ((Q[23] & longmask[32]) != 0) { continue; }
1129                            x[4] = RR(Q[5] - Q[4], 7) - F(Q[4], Q[3], Q[2]) - Q[1] - 0xf57c0faf;
1130                            Q[24] = Q[23] + RL(G(Q[23], Q[22], Q[21]) + Q[20] + x[4] + 0xe7d3fbc8, 20);
1131                            if ((Q[24] & longmask[32]) != longmask[32]) { continue; }
1132                            hQ3p = Q[3] & 0x77ffffda;
1133                            hQ4p = Q[4] & 0x8bfffff5;
1134                            hQ14p = Q[14] & 0xe3ffff88;
1135                            constxx = RR(Q[7] - Q[6], 17) - 0xa8304613 - RR(Q[18] - Q[17], 9) + 0xc040b340 + G(Q[17], Q[16], Q[15]) - F(Q[6], Q[5], hQ4p) - hQ3p + hQ14p;
1136
1137                            B1a = RR(Q[13] - Q[12], 7) - F(Q[12], Q[11], Q[10]) - 0x6b901122;
1138                            B1b = Q[21] + 0x21e1cde6;
1139                            B1c = x[5] + 0xfffa3942;
1140                            B1d = x[1] + 0xa4beea44;
1141                            B1e = x[15] + 0x1fa27cf8;
1142                            B1f = x[5] + 0xfc93a039;
1143
1144
1145                            for (Q14 = 0; Q14 < 512; Q14++)
1146                            {
1147                                if (IsStopped)
1148                                    return 1;
1149
1150                                MatchProgress = 5;
1151
1152                                constxxx = constxx + maskQ14[Q14];
1153                                if ((constxxx & 0x03ffffd0) != 0) { continue; }
1154                                Q[4] = (constxxx & 0x7400000a) + hQ4p;
1155                                Q[3] = (constxxx & 0x88000025) + hQ3p;
1156                                x[2] = RR(Q[3] - Q[2], 17) - F(Q[2], Q[1], QM0) - QM1 - 0x242070db;
1157
1158                                B2a = x[2] + 0xfcefa3f8;
1159
1160
1161                                for (Q4 = 0; Q4 < 1; Q4++)//tunnel Q4,26 not included
1162                                {
1163                                    if (IsStopped)
1164                                        return 1;
1165
1166                                    MatchProgress = 6;
1167
1168                                    Q[4] = Q[4] ^ 0x02000000;
1169                                    x[4] = RR(Q[5] - Q[4], 7) - F(Q[4], Q[3], Q[2]) - Q[1] - 0xf57c0faf;
1170                                    Q[24] = Q[23] + RL(G(Q[23], Q[22], Q[21]) + Q[20] + x[4] + 0xe7d3fbc8, 20);
1171                                    if ((Q[24] & longmask[32]) != longmask[32]) { continue; }
1172
1173                                    Q[14] = maskQ14[Q14] + hQ14p;
1174
1175                                    x[6] = RR(Q[7] - Q[6], 17) - F(Q[6], Q[5], Q[4]) - Q[3] - 0xa8304613;
1176                                    //x[ 2] = RR(Q[ 3]-Q[ 2],17) - F(Q[ 2],Q[ 1],  QM0) -   QM1 - 0x242070db;
1177                                    x[3] = RR(Q[4] - Q[3], 22) - F(Q[3], Q[2], Q[1]) - QM0 - 0xc1bdceee;
1178                                    x[7] = RR(Q[8] - Q[7], 22) - F(Q[7], Q[6], Q[5]) - Q[4] - 0xfd469501;
1179                                    x[13] = RR(Q[14] - Q[13], 12) - F(Q[13], Q[12], Q[11]) - Q[10] - 0xfd987193;
1180                                    x[14] = RR(Q[15] - Q[14], 17) - F(Q[14], Q[13], Q[12]) - Q[11] - 0xa679438e;
1181
1182                                    B3a = Q[22] + x[14] + 0xc33707d6;
1183                                    B3b = Q[23] + x[3] + 0xf4d50d87;
1184                                    B3c = Q[24] + 0x455a14ed;
1185                                    B3d = x[13] + 0xa9e3e905;
1186                                    B3e = x[7] + 0x676f02d9;
1187                                    B3f = x[14] + 0xfde5380c;
1188                                    B3g = x[4] + 0x4bdecfa9;
1189                                    B3h = x[7] + 0xf6bb4b60;
1190                                    B3i = x[13] + 0x289b7ec6;
1191                                    B3j = x[3] + 0xd4ef3085;
1192                                    B3k = x[6] + 0x4881d05;
1193                                    B3l = x[2] + 0xc4ac5665;
1194                                    B3m = x[7] + 0x432aff97;
1195                                    B3n = x[14] + 0xab9423a7;
1196
1197
1198                                    for (Q9 = 0; Q9 < 8; Q9++)//8
1199                                    {
1200                                        if (IsStopped)
1201                                            return 1;
1202
1203                                        MatchProgress = 7;
1204
1205                                        Q[9] = tempq9 ^ mask_Q9[Q9];
1206                                        //x[ 8] = RR(Q[ 9]-Q[ 8], 7) - F(Q[ 8],Q[ 7],Q[ 6]) - Q[ 5] - 0x698098d8;
1207                                        //B0a= F(Q[ 8],Q[ 7],Q[ 6]) + Q[ 5] + 0x698098d8;               
1208                                        x[8] = RR(Q[9] - Q[8], 7) - B0a;
1209                                        //x[ 9] = RR(Q[10]-Q[ 9],12) - F(Q[ 9],Q[ 8],Q[ 7]) - Q[ 6] - 0x8b44f7af;               
1210                                        //B0b = Q[ 6] + 0x8b44f7af;
1211                                        x[9] = RR(Q[10] - Q[9], 12) - F(Q[9], Q[8], Q[7]) - B0b;
1212                                        //x[12] = RR(Q[13]-Q[12], 7) - F(Q[12],Q[11],Q[10]) - Q[ 9] - 0x6b901122;
1213                                        //B1a=RR(Q[13]-Q[12], 7) - F(Q[12],Q[11],Q[10]) - 0x6b901122;
1214                                        x[12] = B1a - Q[9];
1215                                        //Q[25] = Q[24] + RL( G(Q[24],Q[23],Q[22]) + Q[21] + x[9] + 0x21e1cde6, 5);
1216                                        //B1b = Q[21] + 0x21e1cde6;
1217                                        Q[25] = Q[24] + RL(G(Q[24], Q[23], Q[22]) + B1b + x[9], 5);
1218                                        //Q[26] = Q[25] + RL( G(Q[25],Q[24],Q[23]) + Q[22] + x[14] + 0xc33707d6, 9);
1219                                        //B3a=Q[22] + x[14] + 0xc33707d6;         
1220                                        Q[26] = Q[25] + RL(G(Q[25], Q[24], Q[23]) + B3a, 9);
1221                                        // Q[27] = Q[26] + RL( G(Q[26],Q[25],Q[24]) + Q[23] + x[3] + 0xf4d50d87, 14);
1222                                        //B3b = Q[23] + x[3] + 0xf4d50d87;
1223                                        Q[27] = Q[26] + RL(G(Q[26], Q[25], Q[24]) + B3b, 14);
1224                                        //Q[28] = Q[27] + RL( G(Q[27],Q[26],Q[25]) + Q[24] + x[8] + 0x455a14ed, 20);
1225                                        //B3c = Q[24] + 0x455a14ed;
1226                                        Q[28] = Q[27] + RL(G(Q[27], Q[26], Q[25]) + x[8] + B3c, 20);
1227                                        //Q[29] = Q[28] + RL( G(Q[28],Q[27],Q[26]) + Q[25] + x[13] + 0xa9e3e905, 5);
1228                                        //B3d = x[13] + 0xa9e3e905;             
1229                                        Q[29] = Q[28] + RL(G(Q[28], Q[27], Q[26]) + Q[25] + B3d, 5);
1230                                        //Q[30] = Q[29] + RL( G(Q[29],Q[28],Q[27]) + Q[26] + x[2] + 0xfcefa3f8, 9);
1231                                        //B2a = x[2] + 0xfcefa3f8;       
1232                                        Q[30] = Q[29] + RL(G(Q[29], Q[28], Q[27]) + Q[26] + B2a, 9);
1233                                        //Q[31] = Q[30] + RL( G(Q[30],Q[29],Q[28]) + Q[27] + x[7] + 0x676f02d9, 14);
1234                                        //B3e = x[7] + 0x676f02d9;       
1235                                        Q[31] = Q[30] + RL(G(Q[30], Q[29], Q[28]) + Q[27] + B3e, 14);
1236                                        Q[32] = Q[31] + RL(G(Q[31], Q[30], Q[29]) + Q[28] + x[12] + 0x8d2a4c8a, 20);
1237                                        //Q[33] = Q[32] + RL( H(Q[32],Q[31],Q[30]) + Q[29] + x[5] +0xfffa3942, 4);
1238                                        //B1c = x[5] +0xfffa3942;
1239                                        Q[33] = Q[32] + RL(H(Q[32], Q[31], Q[30]) + Q[29] + B1c, 4);
1240
1241                                        Q[34] = Q[33] + RL(H(Q[33], Q[32], Q[31]) + Q[30] + x[8] + 0x8771f681, 11);
1242
1243                                        //bit 16 nulovy
1244                                        zavorka_Q35 = H(Q[34], Q[33], Q[32]) + Q[31] + x[11] + 0x6d9d6122;
1245                                        if ((zavorka_Q35 & longmask[16]) != 0) { continue; }
1246
1247                                        Q[35] = Q[34] + RL(zavorka_Q35, 16);
1248                                        //Q[36] = Q[35] + RL( H(Q[35],Q[34],Q[33]) + Q[32] + x[14] + 0xfde5380c, 23);
1249                                        //B3f = x[14] + 0xfde5380c;
1250                                        Q[36] = Q[35] + RL(H(Q[35], Q[34], Q[33]) + Q[32] + B3f, 23);
1251                                        //Q[37] = Q[36] + RL( H(Q[36],Q[35],Q[34]) + Q[33] + x[1] + 0xa4beea44, 4);
1252                                        //B1d =  x[1] + 0xa4beea44;               
1253                                        Q[37] = Q[36] + RL(H(Q[36], Q[35], Q[34]) + Q[33] + B1d, 4);
1254                                        // Q[38] = Q[37] + RL( H(Q[37],Q[36],Q[35]) + Q[34] + x[4] + 0x4bdecfa9, 11);
1255                                        //B3g = x[4] + 0x4bdecfa9;
1256                                        Q[38] = Q[37] + RL(H(Q[37], Q[36], Q[35]) + Q[34] + B3g, 11);
1257                                        //Q[39] = Q[38] + RL( H(Q[38],Q[37],Q[36]) + Q[35] + x[7] + 0xf6bb4b60, 16);
1258                                        //B3h = x[7] + 0xf6bb4b60;
1259                                        Q[39] = Q[38] + RL(H(Q[38], Q[37], Q[36]) + Q[35] + B3h, 16);
1260
1261                                        //Q[40] = Q[39] + RL( H(Q[39],Q[38],Q[37]) + Q[36] + x[10] +0xbebfbc70 , 23);
1262                                        //B01a =        x[10] +0xbebfbc70;       
1263                                        Q[40] = Q[39] + RL(H(Q[39], Q[38], Q[37]) + Q[36] + B01a, 23);
1264                                        //Q[41] = Q[40] + RL( H(Q[40],Q[39],Q[38]) + Q[37] + x[13] + 0x289b7ec6, 4);
1265                                        //B3i = x[13] + 0x289b7ec6;
1266                                        Q[41] = Q[40] + RL(H(Q[40], Q[39], Q[38]) + Q[37] + B3i, 4);
1267                                        //Q[42] = Q[41] + RL( H(Q[41],Q[40],Q[39]) + Q[38] + x[0] + 0xeaa127fa, 11);
1268                                        //B02a = x[0] + 0xeaa127fa;       
1269                                        Q[42] = Q[41] + RL(H(Q[41], Q[40], Q[39]) + Q[38] + B02a, 11);
1270                                        //Q[43] = Q[42] + RL( H(Q[42],Q[41],Q[40]) + Q[39] + x[3] + 0xd4ef3085, 16);
1271                                        //B3j = x[3] + 0xd4ef3085;       
1272                                        Q[43] = Q[42] + RL(H(Q[42], Q[41], Q[40]) + Q[39] + B3j, 16);
1273                                        //Q[44] = Q[43] + RL( H(Q[43],Q[42],Q[41]) + Q[40] + x[6] + 0x4881d05, 23);
1274                                        //B3k = x[6] + 0x4881d05;               
1275                                        Q[44] = Q[43] + RL(H(Q[43], Q[42], Q[41]) + Q[40] + B3k, 23);
1276                                        Q[45] = Q[44] + RL(H(Q[44], Q[43], Q[42]) + Q[41] + x[9] + 0xd9d4d039, 4);
1277                                        Q[46] = Q[45] + RL(H(Q[45], Q[44], Q[43]) + Q[42] + x[12] + 0xe6db99e5, 11);
1278
1279                                        //Q[47] = Q[46] + RL( H(Q[46],Q[45],Q[44]) + Q[43] + x[15] + 0x1fa27cf8, 16);
1280                                        //B1e = x[15] + 0x1fa27cf8;               
1281                                        Q[47] = Q[46] + RL(H(Q[46], Q[45], Q[44]) + Q[43] + B1e, 16);
1282                                        //Q[48] = Q[47] + RL( H(Q[47],Q[46],Q[45]) + Q[44] + x[2] + 0xc4ac5665, 23);
1283                                        //B3l = x[2] + 0xc4ac5665;             
1284                                        Q[48] = Q[47] + RL(H(Q[47], Q[46], Q[45]) + Q[44] + B3l, 23);
1285
1286                                        bitI = Q[46] & longmask[32];
1287
1288                                        if ((Q[48] & longmask[32]) != bitI) { continue; }
1289                                        //Q[49] = Q[48] + RL( I(Q[48],Q[47],Q[46]) + Q[45] + x[0] + 0xf4292244, 6);
1290                                        //B02b = x[0] + 0xf4292244;
1291                                        Q[49] = Q[48] + RL(I(Q[48], Q[47], Q[46]) + Q[45] + B02b, 6);
1292
1293
1294                                        bitJ = Q[47] & longmask[32];
1295
1296                                        if ((Q[49] & longmask[32]) != bitJ) { continue; }
1297                                        //Q[50] = Q[49] + RL( I(Q[49],Q[48],Q[47]) + Q[46]  + x[7] + 0x432aff97, 10);
1298                                        //B3m = x[7] + 0x432aff97;
1299                                        Q[50] = Q[49] + RL(I(Q[49], Q[48], Q[47]) + Q[46] + B3m, 10);
1300
1301                                        bit_I_neg = bitI ^ longmask[32];
1302
1303                                        if ((Q[50] & longmask[32]) != bit_I_neg) { continue; }
1304                                        //Q[51] = Q[50] + RL( I(Q[50],Q[49],Q[48]) + Q[47] + x[14] + 0xab9423a7, 15);
1305                                        //B3n = x[14] + 0xab9423a7;
1306                                        Q[51] = Q[50] + RL(I(Q[50], Q[49], Q[48]) + Q[47] + B3n, 15);
1307                                        if ((Q[51] & longmask[32]) != bitJ) { continue; }
1308                                        //Q[52] = Q[51] + RL( I(Q[51],Q[50],Q[49]) + Q[48] + x[5] + 0xfc93a039, 21);
1309                                        //B1f = x[5] + 0xfc93a039;
1310                                        Q[52] = Q[51] + RL(I(Q[51], Q[50], Q[49]) + Q[48] + B1f, 21);
1311
1312
1313
1314
1315                                        if ((Q[52] & longmask[32]) != bit_I_neg) { continue; }
1316                                        Q[53] = Q[52] + RL(I(Q[52], Q[51], Q[50]) + Q[49] + x[12] + 0x655b59c3, 6);
1317                                        if ((Q[53] & longmask[32]) != bitJ) { continue; }
1318                                        Q[54] = Q[53] + RL(I(Q[53], Q[52], Q[51]) + Q[50] + x[3] + 0x8f0ccc92, 10);
1319                                        if ((Q[54] & longmask[32]) != bit_I_neg) { continue; }
1320                                        Q[55] = Q[54] + RL(I(Q[54], Q[53], Q[52]) + Q[51] + x[10] + 0xffeff47d, 15);
1321                                        if ((Q[55] & longmask[32]) != bitJ) { continue; }
1322                                        Q[56] = Q[55] + RL(I(Q[55], Q[54], Q[53]) + Q[52] + x[1] + 0x85845dd1, 21);
1323                                        if ((Q[56] & longmask[32]) != bit_I_neg) { continue; }
1324                                        Q[57] = Q[56] + RL(I(Q[56], Q[55], Q[54]) + Q[53] + x[8] + 0x6fa87e4f, 6);
1325                                        if ((Q[57] & longmask[32]) != bitJ) { continue; }
1326                                        Q[58] = Q[57] + RL(I(Q[57], Q[56], Q[55]) + Q[54] + x[15] + 0xfe2ce6e0, 10);
1327                                        if ((Q[58] & longmask[32]) != bit_I_neg) { continue; }
1328                                        Q[59] = Q[58] + RL(I(Q[58], Q[57], Q[56]) + Q[55] + x[6] + 0xa3014314, 15);
1329                                        if ((Q[59] & longmask[32]) != bitJ) { continue; }
1330                                        Q[60] = Q[59] + RL(I(Q[59], Q[58], Q[57]) + Q[56] + x[13] + 0x4e0811a1, 21);
1331                                        if ((Q[60] & longmask[32]) != bitI) { continue; }
1332                                        if ((Q[60] & longmask[26]) != 0) { continue; }
1333                                        Q[61] = Q[60] + RL(I(Q[60], Q[59], Q[58]) + Q[57] + x[4] + 0xf7537e82, 6);
1334                                        if ((Q[61] & longmask[32]) != bitJ) { continue; }
1335                                        if ((Q[61] & longmask[26]) != longmask[26]) { continue; }
1336                                        zavorka_Q62 = I(Q[61], Q[60], Q[59]) + Q[58] + x[11] + 0xbd3af235;
1337                                        Q[62] = Q[61] + RL(zavorka_Q62, 10);
1338                                        Q[63] = Q[62] + RL(I(Q[62], Q[61], Q[60]) + Q[59] + x[2] + 0x2ad7d2bb, 15);
1339                                        Q[64] = Q[63] + RL(I(Q[63], Q[62], Q[61]) + Q[60] + x[9] + 0xeb86d391, 21);
1340
1341                                        AA0 = IHV1[0] = IHV0[0] + Q[61];
1342                                        DD0 = IHV1[3] = IHV0[3] + Q[62];
1343                                        CC0 = IHV1[2] = IHV0[2] + Q[63];
1344                                        BB0 = IHV1[1] = IHV0[1] + Q[64];
1345
1346                                        if ((DD0 & longmask[26]) != 0) { continue; }
1347                                        if ((CC0 & longmask[26]) != longmask[26]) { continue; }
1348                                        if ((CC0 & longmask[27]) != 0) { continue; }
1349                                        if (((CC0 ^ DD0) & longmask[32]) != 0) { continue; }
1350                                        if ((BB0 & longmask[6]) != 0) { continue; }
1351                                        if ((BB0 & longmask[26]) != 0) { continue; }
1352                                        if ((BB0 & longmask[27]) != 0) { continue; }
1353                                        if (((BB0 ^ CC0) & longmask[32]) != 0) { continue; }
1354
1355                                        for (i = 0; i < 16; i++) Hx[i] = x[i];
1356                                        Hx[4] = x[4] + 0x80000000; Hx[11] = x[11] + 0x00008000; Hx[14] = x[14] + 0x80000000;
1357                                        a = HIHV0[0]; b = HIHV0[1]; c = HIHV0[2]; d = HIHV0[3];
1358                                        HMD5Tr();
1359                                        HIHV1[0] = HIHV0[0] + a;
1360                                        HIHV1[3] = HIHV0[3] + d;
1361                                        HIHV1[2] = HIHV0[2] + c;
1362                                        HIHV1[1] = HIHV0[1] + b;
1363                                        if ((HIHV1[0] - IHV1[0] - 0x80000000) != 0) { continue; }
1364                                        if ((HIHV1[1] - IHV1[1] - 0x82000000) != 0) { continue; }
1365                                        if ((HIHV1[2] - IHV1[2] - 0x82000000) != 0) { continue; }
1366                                        if ((HIHV1[3] - IHV1[3] - 0x82000000) != 0) { continue; }
1367
1368
1369                                        for (i = 0; i < 16; i++)
1370                                        {
1371                                            //memcpy( &v1[i * 4], &x[i], 4);
1372                                            byte[] xBytes = BitConverter.GetBytes(x[i]);
1373                                            Array.Copy(xBytes, 0, v1, i * 4, 4);
1374
1375                                            // memcpy( &v2[i * 4], &Hx[i], 4);
1376                                            byte[] hxBytes = BitConverter.GetBytes(Hx[i]);
1377                                            Array.Copy(hxBytes, 0, v2, i * 4, 4);
1378                                        }
1379
1380                                        for (i = 0; i < 4; i++) { P_IHV1[i] = IHV1[i]; P_HIHV1[i] = HIHV1[i]; }
1381
1382                                        MatchProgress = 8;
1383
1384                                        while (B2() != 0 && !IsStopped) ;
1385
1386                                        if (IsStopped)
1387                                            return 1;
1388
1389                                        return 0;
1390                                    }//Q9
1391                                }//Q4
1392                            }//Q14
1393                        }//Q13
1394                    }//Q20
1395                }//Q10
1396            }//Q16Q17
1397
1398            return 1;
1399        }
1400        /*=========================================================*/
1401        int B2()
1402        {
1403            UInt32[] Q = new UInt32[65], x = new UInt32[16];
1404            UInt32 QM0, QM1, QM2, QM3, AA0, BB0, CC0, DD0;
1405            UInt32 cq16, cq1q2, tQ1, tQ2, cq9, cq4, temp2Q1, temp2Q2, temp2Q4, temp2Q9;
1406            UInt32 bitI, bit_neg_I, bitJ, bit_J_neg, bitK, bitL;
1407            UInt32[] IHV2 = new UInt32[4], HIHV2 = new UInt32[4];
1408            UInt32 zavorka_Q17, zavorka_Q19, zavorka_Q20, zavorka_Q23, zavorka_Q35, zavorka_Q62;
1409            UInt32 i, Hi, Lo, jednicky, spolecna_maska;
1410
1411            MatchProgressMax = 5;
1412
1413            AA0 = QM3 = P_IHV1[0]; DD0 = QM2 = P_IHV1[3]; CC0 = QM1 = P_IHV1[2]; BB0 = QM0 = P_IHV1[1];
1414            bitI = BB0 & longmask[32];
1415            bit_neg_I = (~BB0) & longmask[32];
1416
1417
1418            /*  a1 */
1419            // Q[ 1]         =~Ivvv 010v vv1v vvv1 .vvv 0vvv vv0. ...v
1420            // pozice s RNG  = .*** ...* **.* ***. **** .*** **.* ****  0x71def7df
1421            // pozice s 0    = .... *.*. .... .... .... *... ..*. ....  0x0a000820
1422            // pozice s 1    = .... .*.. ..*. ...* .... .... .... ....  0x04210000
1423            Q[1] = bit_neg_I + (rng() & 0x71def7df) + 0x04210000;
1424
1425            /*  d1*/
1426            //Multi message modif. meth. (MMMM) Q1Q2, Klima
1427            // Q[ 2]         =~I^^^ 110^ ^^0^ ^^^1 0^^^ 1^^^ ^^0v v00^
1428            // pozice s RNG  = .... .... .... .... .... .... ...* *...  0x00000018
1429            // pozice s 0    = .... ..*. ..*. .... *... .... ..*. .**.  0x02208026
1430            // pozice s 1    = .... **.. .... ...* .... *... .... ....  0x0c010800
1431            // pozice s Q[ 1]= .*** ...* **.* ***. .*** .*** **.. ...*  0x71de77c1
1432            Q[2] = bit_neg_I + (rng() & 0x00000018) + 0x0c010800 + (Q[1] & 0x71de77c1);
1433
1434            /*  c1*/
1435            // Q[ 3]         =~I011 111. ..01 1111 1..0 1vv1 011^ ^111
1436            // pozice s RNG  = .... ...* **.. .... .**. .**. .... ....  0x01c06600
1437            // pozice s 0    = .*.. .... ..*. .... ...* .... *... ....  0x40201080
1438            // pozice s 1    = ..** ***. ...* **** *... *..* .**. .***  0x3e1f8967
1439            // pozice s Q[ 2]= .... .... .... .... .... .... ...* *...  0x00000018
1440            Q[3] = bit_neg_I + (rng() & 0x01c06600) + 0x3e1f8967 + (Q[2] & 0x00000018);
1441
1442            /*  b1*/
1443            // Q[ 4]         =~I011 101. ..00 0100 ...0 0^^0 0001 0001
1444            // pozice s RNG  = .... ...* **.. .... ***. .... .... ....  0x01c0e000
1445            // pozice s 0    = .*.. .*.. ..** *.** ...* *..* ***. ***.  0x443b19ee
1446            // pozice s 1    = ..** *.*. .... .*.. .... .... ...* ...*  0x3a040011
1447            // pozice s Q[ 3]= .... .... .... .... .... .**. .... ....  0x00000600
1448            Q[4] = bit_neg_I + (rng() & 0x01c0e000) + 0x3a040011 + (Q[3] & 0x00000600);
1449
1450            /*  a2*/
1451            //Q4 tunnel, Klima, bits 25-23,16-14
1452            // Q[ 5]         = I100 10.0 0010 1111 0000 1110 0101 0000
1453            // pozice s RNG  = .... ..*. .... .... .... .... .... ....  0x02000000
1454            // pozice s 0    = ..** .*.* **.* .... **** ...* *.*. ****  0x35d0f1af
1455            // pozice s 1    = .*.. *... ..*. **** .... ***. .*.* ....  0x482f0e50
1456            Q[5] = bitI + (rng() & 0x02000000) + 0x482f0e50;
1457
1458            /* d2 */
1459            //Q4 tunnel, Klima, bits 25-23,16-14
1460            // Q[ 6]         = I..0 0101 1110 ..10 1110 1100 0101 0110
1461            // pozice s RNG  = .**. .... .... **.. .... .... .... ....  0x600c0000
1462            // pozice s 0    = ...* *.*. ...* ...* ...* ..** *.*. *..*  0x1a1113a9
1463            // pozice s 1    = .... .*.* ***. ..*. ***. **.. .*.* .**.  0x05e2ec56
1464            Q[6] = bitI + (rng() & 0x600c0000) + 0x05e2ec56;
1465
1466            /* c2 */
1467            // Q[ 7]         =~I..1 0111 1.00 ..01 10.1 1110 00.. ..v1
1468            // pozice s RNG  = .**. .... .*.. **.. ..*. .... ..** ***.  0x604c203e
1469            // pozice s 0    = .... *... ..** ..*. .*.. ...* **.. ....  0x083241c0
1470            // pozice s 1    = ...* .*** *... ...* *..* ***. .... ...*  0x17819e01
1471            Q[7] = bit_neg_I + (rng() & 0x604c203e) + 0x17819e01;
1472
1473            /* b2 */
1474            // Q[ 8]         =~I..0 0100 0.11 ..10 1..v ..11 111. ..^0
1475            // pozice s RNG  = .**. .... .*.. **.. .*** **.. ...* **..  0x604c7c1c
1476            // pozice s 0    = ...* *.** *... ...* .... .... .... ...*  0x1b810001
1477            // pozice s 1    = .... .*.. ..** ..*. *... ..** ***. ....  0x043283e0
1478            // pozice s Q[ 7]= .... .... .... .... .... .... .... ..*.  0x00000002
1479            Q[8] = bit_neg_I + (rng() & 0x604c7c1c) + 0x043283e0 + (Q[7] & 0x00000002);
1480            /* a3 */
1481            //Q9 tunnel plus MMMM-Q12Q11, Klima, prepared, not programmed
1482            // Q[ 9]         =~Ivv1 1100 0xxx .x01 0..^ .x01 110x xx01
1483            // pozice s RNG  = .**. .... .*** **.. .**. **.. ...* **..  0x607c6c1c
1484            // pozice s 0    = .... ..** *... ..*. *... ..*. ..*. ..*.  0x03828222
1485            // pozice s 1    = ...* **.. .... ...* .... ...* **.. ...*  0x1c0101c1
1486            // pozice s Q[ 8]= .... .... .... .... ...* .... .... ....  0x00001000
1487            Q[9] = bit_neg_I + (rng() & 0x607c6c1c) + 0x1c0101c1 + (Q[8] & 0x00001000);
1488
1489            /*  d3*/
1490            //Q9 tunnel plus MMMM-Q12Q11, Klima
1491            // Q[10]         =~I^^1 1111 1000 v011 1vv0 1011 1100 0000
1492            // pozice s RNG  = .... .... .... *... .**. .... .... ....  0x00086000
1493            // pozice s 0    = .... .... .*** .*.. ...* .*.. ..** ****  0x0074143f
1494            // pozice s 1    = ...* **** *... ..** *... *.** **.. ....  0x1f838bc0
1495            // pozice s Q[ 9]= .**. .... .... .... .... .... .... ....  0x60000000
1496            Q[10] = bit_neg_I + (rng() & 0x00086000) + 0x1f838bc0 + (Q[9] & 0x60000000);
1497            /* c3 */
1498            //Q9 tunnel plus MMMM-Q12Q11, Klima
1499            // Q[11]         =~Ivvv vvvv .111 ^101 1^^0 0111 11v1 1111
1500            // pozice s RNG  = .*** **** *... .... .... .... ..*. ....  0x7f800020
1501            // pozice s 0    = .... .... .... ..*. ...* *... .... ....  0x00021800
1502            // pozice s 1    = .... .... .*** .*.* *... .*** **.* ****  0x007587df
1503            // pozice s Q[10]= .... .... .... *... .**. .... .... ....  0x00086000
1504            Q[11] = bit_neg_I + (rng() & 0x7f800020) + 0x007587df + (Q[10] & 0x00086000);
1505            /* b3 */
1506            // MMMM-Q12Q11, Klima
1507            // Q[12]         =~I^^^ ^^^^ .... 1000 0001 .... 1.^. ....
1508            // pozice s RNG  = .... .... **** .... .... **** .*.* ****  0x00f00f5f
1509            // pozice s 0    = .... .... .... .*** ***. .... .... ....  0x0007e000
1510            // pozice s 1    = .... .... .... *... ...* .... *... ....  0x00081080
1511            // pozice s Q[11]= .*** **** .... .... .... .... ..*. ....  0x7f000020
1512            Q[12] = bit_neg_I + (rng() & 0x00f00f5f) + 0x00081080 + (Q[11] & 0x7f000020);
1513            /*  a4*/
1514            // Q[13]         = I011 1111 0... 1111 111. .... 0... 1...
1515            // pozice s RNG  = .... .... .*** .... ...* **** .*** .***  0x00701f77
1516            // pozice s 0    = .*.. .... *... .... .... .... *... ....  0x40800080
1517            // pozice s 1    = ..** **** .... **** ***. .... .... *...  0x3f0fe008
1518            Q[13] = bitI + (rng() & 0x00701f77) + 0x3f0fe008;
1519            /* d4 */
1520            // Q[14]         = I100 0000 1... 1011 111. .... 1... 1...
1521            // pozice s RNG  = .... .... .*** .... ...* **** .*** .***  0x00701f77
1522            // pozice s 0    = ..** **** .... .*.. .... .... .... ....  0x3f040000
1523            // pozice s 1    = .*.. .... *... *.** ***. .... *... *...  0x408be088
1524            Q[14] = bitI + (rng() & 0x00701f77) + 0x408be088;
1525            /* c4 */
1526            // Q[15]         = 0111 1101 .... ..10 00.. .... .... 0...
1527            // pozice s RNG  = .... .... **** **.. ..** **** **** .***  0x00fc3ff7
1528            // pozice s 0    = *... ..*. .... ...* **.. .... .... *...  0x8201c008
1529            // pozice s 1    = .*** **.* .... ..*. .... .... .... ....  0x7d020000
1530            //Q[15] =  (rng() & 0x00fc3ff7) +  0x7d020000;
1531            //bitL = 0;
1532            /* b4 */
1533            // Q[16]         = ^.10 .... .... ..01 1... .... .... 1...
1534            // pozice s RNG  = .*.. **** **** **.. .*** **** **** .***  0x4ffc7ff7
1535            // pozice s 0    = ...* .... .... ..*. .... .... .... ....  0x10020000
1536            // pozice s 1    = ..*. .... .... ...* *... .... .... *...  0x20018008
1537            // pozice s Q[15]= *......................................  0x80000000
1538            //Q[16] =  (rng() & 0x4ffc7ff7) + 0x20018008;
1539
1540            spolecna_maska = 0x71de77c1 & (~(BB0 ^ CC0));
1541            jednicky = 0;
1542            for (i = 1; i < 33; i++) { if ((spolecna_maska & longmask[i]) != 0) jednicky++; }
1543
1544            tQ1 = Q[1] & ~spolecna_maska;
1545            tQ2 = Q[2] & ~spolecna_maska;
1546            temp2Q1 = Q[1]; temp2Q2 = Q[2]; temp2Q4 = Q[4]; temp2Q9 = Q[9];
1547
1548
1549            for (cq16 = 0; cq16 < longmask[26]; cq16++)
1550            {
1551                if (IsStopped)
1552                    return 1;
1553
1554                MatchProgress = 1;
1555
1556                Q[1] = temp2Q1; Q[2] = temp2Q2; Q[4] = temp2Q4; Q[9] = temp2Q9;
1557
1558                Q[15] = (rng() & 0x00fc3ff7) + 0x7d020000;
1559                bitL = 0;
1560                Q[16] = (rng() & 0x4ffc7ff7) + 0x20018008;
1561
1562                x[1] = RR(Q[2] - Q[1], 12) - F(Q[1], QM0, QM1) - QM2 - 0xe8c7b756;
1563                zavorka_Q17 = G(Q[16], Q[15], Q[14]) + Q[13] + x[1] + 0xf61e2562;
1564                if ((zavorka_Q17 & 0x07000000) == 0x07000000) { continue; }
1565                Q[17] = Q[16] + RL(zavorka_Q17, 5);
1566                if (((Q[17] ^ Q[16]) & 0x80028008) != 0) { continue; }
1567                x[6] = RR(Q[7] - Q[6], 17) - F(Q[6], Q[5], Q[4]) - Q[3] - 0xa8304613;
1568                Q[18] = Q[17] + RL(G(Q[17], Q[16], Q[15]) + Q[14] + x[6] + 0xc040b340, 9);
1569                if (((Q[18] ^ Q[17]) & 0xa0020000) != 0x00020000) { continue; }
1570
1571                x[11] = RR(Q[12] - Q[11], 22) - F(Q[11], Q[10], Q[9]) - Q[8] - 0x895cd7be;
1572
1573                zavorka_Q19 = G(Q[18], Q[17], Q[16]) + Q[15] + x[11] + 0x265e5a51;
1574                if ((zavorka_Q19 & 0x0003fff8) == 0x0003fff8) { continue; }
1575
1576                Q[19] = Q[18] + RL(zavorka_Q19, 14);
1577                if ((Q[19] & longmask[32]) != bitL) { continue; }
1578                if ((Q[19] & longmask[18]) != 0) { continue; }
1579                x[10] = RR(Q[11] - Q[10], 17) - F(Q[10], Q[9], Q[8]) - Q[7] - 0xffff5bb1;
1580                x[15] = RR(Q[16] - Q[15], 22) - F(Q[15], Q[14], Q[13]) - Q[12] - 0x49b40821;
1581
1582
1583
1584
1585                for (cq1q2 = 0; cq1q2 < longmask[jednicky + 1]; cq1q2++)
1586                {
1587                    if (IsStopped)
1588                        return 1;
1589
1590                    MatchProgress = 2;
1591
1592                    Q[4] = temp2Q4; Q[9] = temp2Q9;
1593
1594                    Q[1] = (rng() & spolecna_maska) + tQ1;
1595                    Q[2] = (Q[1] & spolecna_maska) + tQ2;
1596                    x[0] = RR(Q[1] - QM0, 7) - F(QM0, QM1, QM2) - QM3 - 0xd76aa478;
1597                    zavorka_Q20 = G(Q[19], Q[18], Q[17]) + Q[16] + x[0] + 0xe9b6c7aa;
1598                    if ((zavorka_Q20 & 0xe0000000) == 0) { continue; }
1599                    Q[20] = Q[19] + RL(zavorka_Q20, 20);
1600                    if ((Q[20] & longmask[32]) != bitL) { continue; }
1601                    x[5] = RR(Q[6] - Q[5], 12) - F(Q[5], Q[4], Q[3]) - Q[2] - 0x4787c62a;
1602                    Q[21] = Q[20] + RL(G(Q[20], Q[19], Q[18]) + Q[17] + x[5] + 0xd62f105d, 5);
1603                    if (((Q[21] ^ Q[20]) & 0x80020000) != 0) { continue; }
1604                    Q[22] = Q[21] + RL(G(Q[21], Q[20], Q[19]) + Q[18] + x[10] + 0x2441453, 9);
1605                    if ((Q[22] & longmask[32]) != bitL) { continue; }
1606                    zavorka_Q23 = G(Q[22], Q[21], Q[20]) + Q[19] + x[15] + 0xd8a1e681;
1607                    if ((zavorka_Q23 & longmask[18]) != 0) { continue; }
1608                    Q[23] = Q[22] + RL(zavorka_Q23, 14);
1609                    if ((Q[23] & longmask[32]) != 0) { continue; }
1610                    x[4] = RR(Q[5] - Q[4], 7) - F(Q[4], Q[3], Q[2]) - Q[1] - 0xf57c0faf;
1611                    Q[24] = Q[23] + RL(G(Q[23], Q[22], Q[21]) + Q[20] + x[4] + 0xe7d3fbc8, 20);
1612                    if ((Q[24] & longmask[32]) != longmask[32]) { continue; }
1613
1614                    x[2] = RR(Q[3] - Q[2], 17) - F(Q[2], Q[1], QM0) - QM1 - 0x242070db;
1615                    x[13] = RR(Q[14] - Q[13], 12) - F(Q[13], Q[12], Q[11]) - Q[10] - 0xfd987193;
1616                    x[14] = RR(Q[15] - Q[14], 17) - F(Q[14], Q[13], Q[12]) - Q[11] - 0xa679438e;
1617
1618
1619                    for (cq4 = 0; cq4 < 64; cq4++)
1620                    {
1621                        if (IsStopped)
1622                            return 1;
1623
1624                        MatchProgress = 3;
1625
1626                        Hi = (cq4 & 0x00000038) << 19;
1627                        Lo = (cq4 & 0x00000007) << 13;
1628
1629                        Q[4] = (UInt32)((temp2Q4 & ~0x01c0e000) + Hi + Lo);
1630
1631                        x[4] = RR(Q[5] - Q[4], 7) - F(Q[4], Q[3], Q[2]) - Q[1] - 0xf57c0faf;
1632                        Q[24] = Q[23] + RL(G(Q[23], Q[22], Q[21]) + Q[20] + x[4] + 0xe7d3fbc8, 20);
1633                        if ((Q[24] & longmask[32]) != longmask[32]) { continue; }
1634
1635
1636                        x[3] = RR(Q[4] - Q[3], 22) - F(Q[3], Q[2], Q[1]) - QM0 - 0xc1bdceee;
1637                        x[7] = RR(Q[8] - Q[7], 22) - F(Q[7], Q[6], Q[5]) - Q[4] - 0xfd469501;
1638
1639                        for (cq9 = 0; cq9 < 256; cq9++)
1640                        {
1641                            if (IsStopped)
1642                                return 1;
1643
1644                            MatchProgress = 4;
1645
1646                            Q[9] = temp2Q9 ^ mask2Q9[cq9];
1647                            x[8] = RR(Q[9] - Q[8], 7) - F(Q[8], Q[7], Q[6]) - Q[5] - 0x698098d8;
1648                            x[9] = RR(Q[10] - Q[9], 12) - F(Q[9], Q[8], Q[7]) - Q[6] - 0x8b44f7af;
1649                            x[12] = RR(Q[13] - Q[12], 7) - F(Q[12], Q[11], Q[10]) - Q[9] - 0x6b901122;
1650
1651                            Q[25] = Q[24] + RL(G(Q[24], Q[23], Q[22]) + Q[21] + x[9] + 0x21e1cde6, 5);
1652                            Q[26] = Q[25] + RL(G(Q[25], Q[24], Q[23]) + Q[22] + x[14] + 0xc33707d6, 9);
1653                            Q[27] = Q[26] + RL(G(Q[26], Q[25], Q[24]) + Q[23] + x[3] + 0xf4d50d87, 14);
1654                            Q[28] = Q[27] + RL(G(Q[27], Q[26], Q[25]) + Q[24] + x[8] + 0x455a14ed, 20);
1655                            Q[29] = Q[28] + RL(G(Q[28], Q[27], Q[26]) + Q[25] + x[13] + 0xa9e3e905, 5);
1656                            Q[30] = Q[29] + RL(G(Q[29], Q[28], Q[27]) + Q[26] + x[2] + 0xfcefa3f8, 9);
1657                            Q[31] = Q[30] + RL(G(Q[30], Q[29], Q[28]) + Q[27] + x[7] + 0x676f02d9, 14);
1658                            Q[32] = Q[31] + RL(G(Q[31], Q[30], Q[29]) + Q[28] + x[12] + 0x8d2a4c8a, 20);
1659                            Q[33] = Q[32] + RL(H(Q[32], Q[31], Q[30]) + Q[29] + x[5] + 0xfffa3942, 4);
1660                            Q[34] = Q[33] + RL(H(Q[33], Q[32], Q[31]) + Q[30] + x[8] + 0x8771f681, 11);
1661
1662                            zavorka_Q35 = H(Q[34], Q[33], Q[32]) + Q[31] + x[11] + 0x6d9d6122;
1663                            if ((zavorka_Q35 & longmask[16]) != longmask[16]) { continue; }
1664                            Q[35] = Q[34] + RL(zavorka_Q35, 16);
1665
1666                            Q[36] = Q[35] + RL(H(Q[35], Q[34], Q[33]) + Q[32] + x[14] + 0xfde5380c, 23);
1667                            Q[37] = Q[36] + RL(H(Q[36], Q[35], Q[34]) + Q[33] + x[1] + 0xa4beea44, 4);
1668                            Q[38] = Q[37] + RL(H(Q[37], Q[36], Q[35]) + Q[34] + x[4] + 0x4bdecfa9, 11);
1669                            Q[39] = Q[38] + RL(H(Q[38], Q[37], Q[36]) + Q[35] + x[7] + 0xf6bb4b60, 16);
1670                            Q[40] = Q[39] + RL(H(Q[39], Q[38], Q[37]) + Q[36] + x[10] + 0xbebfbc70, 23);
1671                            Q[41] = Q[40] + RL(H(Q[40], Q[39], Q[38]) + Q[37] + x[13] + 0x289b7ec6, 4);
1672                            Q[42] = Q[41] + RL(H(Q[41], Q[40], Q[39]) + Q[38] + x[0] + 0xeaa127fa, 11);
1673                            Q[43] = Q[42] + RL(H(Q[42], Q[41], Q[40]) + Q[39] + x[3] + 0xd4ef3085, 16);
1674                            Q[44] = Q[43] + RL(H(Q[43], Q[42], Q[41]) + Q[40] + x[6] + 0x4881d05, 23);
1675                            Q[45] = Q[44] + RL(H(Q[44], Q[43], Q[42]) + Q[41] + x[9] + 0xd9d4d039, 4);
1676                            Q[46] = Q[45] + RL(H(Q[45], Q[44], Q[43]) + Q[42] + x[12] + 0xe6db99e5, 11);
1677                            Q[47] = Q[46] + RL(H(Q[46], Q[45], Q[44]) + Q[43] + x[15] + 0x1fa27cf8, 16);
1678                            Q[48] = Q[47] + RL(H(Q[47], Q[46], Q[45]) + Q[44] + x[2] + 0xc4ac5665, 23);
1679
1680                            bitJ = Q[46] & longmask[32];
1681                            if ((Q[48] & longmask[32]) != bitJ) { continue; }
1682
1683                            Q[49] = Q[48] + RL(I(Q[48], Q[47], Q[46]) + Q[45] + x[0] + 0xf4292244, 6);
1684                            bitK = Q[47] & longmask[32];
1685                            if ((Q[49] & longmask[32]) != bitK) { continue; }
1686
1687                            Q[50] = Q[49] + RL(I(Q[49], Q[48], Q[47]) + Q[46] + x[7] + 0x432aff97, 10);
1688                            bit_J_neg = bitJ ^ longmask[32];
1689                            if ((Q[50] & longmask[32]) != bit_J_neg) { continue; }
1690
1691                            Q[51] = Q[50] + RL(I(Q[50], Q[49], Q[48]) + Q[47] + x[14] + 0xab9423a7, 15);
1692                            if ((Q[51] & longmask[32]) != bitK) { continue; }
1693                            Q[52] = Q[51] + RL(I(Q[51], Q[50], Q[49]) + Q[48] + x[5] + 0xfc93a039, 21);
1694                            if ((Q[52] & longmask[32]) != bit_J_neg) { continue; }
1695                            Q[53] = Q[52] + RL(I(Q[52], Q[51], Q[50]) + Q[49] + x[12] + 0x655b59c3, 6);
1696                            if ((Q[53] & longmask[32]) != bitK) { continue; }
1697                            Q[54] = Q[53] + RL(I(Q[53], Q[52], Q[51]) + Q[50] + x[3] + 0x8f0ccc92, 10);
1698                            if ((Q[54] & longmask[32]) != bit_J_neg) { continue; }
1699                            Q[55] = Q[54] + RL(I(Q[54], Q[53], Q[52]) + Q[51] + x[10] + 0xffeff47d, 15);
1700                            if ((Q[55] & longmask[32]) != bitK) { continue; }
1701                            Q[56] = Q[55] + RL(I(Q[55], Q[54], Q[53]) + Q[52] + x[1] + 0x85845dd1, 21);
1702                            if ((Q[56] & longmask[32]) != bit_J_neg) { continue; }
1703                            Q[57] = Q[56] + RL(I(Q[56], Q[55], Q[54]) + Q[53] + x[8] + 0x6fa87e4f, 6);
1704                            if ((Q[57] & longmask[32]) != bitK) { continue; }
1705                            Q[58] = Q[57] + RL(I(Q[57], Q[56], Q[55]) + Q[54] + x[15] + 0xfe2ce6e0, 10);
1706                            if ((Q[58] & longmask[32]) != bit_J_neg) { continue; }
1707                            Q[59] = Q[58] + RL(I(Q[58], Q[57], Q[56]) + Q[55] + x[6] + 0xa3014314, 15);
1708                            if ((Q[59] & longmask[32]) != bitK) { continue; }
1709                            Q[60] = Q[59] + RL(I(Q[59], Q[58], Q[57]) + Q[56] + x[13] + 0x4e0811a1, 21);
1710                            if ((Q[60] & longmask[32]) != bitJ) { continue; }
1711                            if ((Q[60] & longmask[26]) != 0) { continue; }
1712                            Q[61] = Q[60] + RL(I(Q[60], Q[59], Q[58]) + Q[57] + x[4] + 0xf7537e82, 6);
1713                            if ((Q[61] & longmask[32]) != bitK) { continue; }
1714                            if ((Q[61] & longmask[26]) != longmask[26]) { continue; }
1715
1716                            zavorka_Q62 = I(Q[61], Q[60], Q[59]) + Q[58] + x[11] + 0xbd3af235;
1717                            if ((zavorka_Q62 & 0x003f8000) == 0) { continue; }
1718
1719                            Q[62] = Q[61] + RL(zavorka_Q62, 10);
1720                            if ((Q[62] & longmask[32]) != bitJ) { continue; }
1721                            if ((Q[62] & longmask[26]) != longmask[26]) { continue; }
1722                            Q[63] = Q[62] + RL(I(Q[62], Q[61], Q[60]) + Q[59] + x[2] + 0x2ad7d2bb, 15);
1723                            if ((Q[63] & longmask[32]) != bitK) { continue; }
1724                            if ((Q[63] & longmask[26]) != longmask[26]) { continue; }
1725                            Q[64] = Q[63] + RL(I(Q[63], Q[62], Q[61]) + Q[60] + x[9] + 0xeb86d391, 21);
1726                            if ((Q[64] & longmask[26]) != longmask[26]) { continue; }// not necessary (Sasaki), try to remove
1727
1728
1729                            IHV2[0] = P_IHV1[0] + Q[61];
1730                            IHV2[1] = P_IHV1[1] + Q[64];
1731                            IHV2[2] = P_IHV1[2] + Q[63];
1732                            IHV2[3] = P_IHV1[3] + Q[62];
1733
1734                            for (i = 0; i < 16; i++) Hx[i] = x[i];
1735                            Hx[4] = x[4] - 0x80000000; Hx[11] = x[11] - 0x00008000; Hx[14] = x[14] - 0x80000000;
1736                            a = P_HIHV1[0]; b = P_HIHV1[1]; c = P_HIHV1[2]; d = P_HIHV1[3];
1737
1738                            HMD5Tr();
1739                            HIHV2[0] = P_HIHV1[0] + a; HIHV2[1] = P_HIHV1[1] + b; HIHV2[2] = P_HIHV1[2] + c; HIHV2[3] = P_HIHV1[3] + d;
1740                            if ((HIHV2[0] - IHV2[0]) != 0) { continue; }
1741                            if ((HIHV2[1] - IHV2[1]) != 0) { continue; }
1742                            if ((HIHV2[2] - IHV2[2]) != 0) { continue; }
1743                            if ((HIHV2[3] - IHV2[3]) != 0) { continue; }
1744
1745                            for (i = 0; i < 16; i++)
1746                            {
1747                                if (IsStopped)
1748                                    return 1;
1749
1750                                //memcpy( &v1[64 + (i * 4)], &x[i], 4);
1751                                byte[] xBytes = BitConverter.GetBytes(x[i]);
1752                                Array.Copy(xBytes, 0, v1, 64 + i * 4, 4);
1753
1754                                // memcpy( &v2[64 + (i * 4)], &Hx[i], 4);
1755                                byte[] hxBytes = BitConverter.GetBytes(Hx[i]);
1756                                Array.Copy(hxBytes, 0, v2, 64 + i * 4, 4);
1757                            }
1758
1759                            MD5Test(v1, 128, hash1);
1760                            MD5Test(v2, 128, hash2);
1761
1762                            if (hash1.Union(hash2).Count() == hash1.Intersect(hash2).Count())
1763                            {
1764                                if (IsStopped)
1765                                    return 1;
1766
1767                                MatchProgress = 5;
1768
1769                                FirstCollidingData = v1;
1770                                SecondCollidingData = v2;
1771                                return (0);
1772                            }
1773                        }//cq9
1774                    }//cq4
1775                }//cq1q2
1776            }//cq16
1777            return (-1);
1778        }//B2
1779        /*=========================================================*/
1780
1781        protected override void PerformStop()
1782        {
1783            IsStopped = true;
1784        }
1785    }
1786}
Note: See TracBrowser for help on using the repository browser.