]> zoso.dev Git - libnemo.git/commitdiff
Add error handling to test page. Upload new bundle for testing.
authorChris Duncan <chris@zoso.dev>
Thu, 9 Jan 2025 08:15:07 +0000 (00:15 -0800)
committerChris Duncan <chris@zoso.dev>
Thu, 9 Jan 2025 08:15:07 +0000 (00:15 -0800)
global.min.js
index.html

index b0960509ea70d94c56dc04d42ac656422c5d1d8e..9bc13137fc523058a94260a52d0149c6299926c2 100644 (file)
@@ -3240,8 +3240,6 @@ var NanoPowGpuComputeShader;
 var init_gpu_compute = __esm({
   "src/lib/nano-pow/shaders/gpu-compute.ts"() {
     "use strict";
-    {
-    }
     NanoPowGpuComputeShader = `
 struct UBO {
        blockhash: array<vec4<u32>, 2>,
@@ -3437,6 +3435,10 @@ fn main(
        var v30: u32 = 0x137E2179u;
        var v31: u32 = 0x5BE0CD19u;
 
+
+
+
+
        /**
        * Twelve rounds of G mixing as part of BLAKE2b compression step.
        * Each sigma r index correlates with the reference implementation, but each
@@ -4156,172 +4158,7355 @@ fn main(
        ****************************************************************************/
 
        G(&v0, &v1, &v8, &v9, &v16, &v17, &v24, &v25, 0u, 0u, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
        G(&v2, &v3, &v10, &v11, &v18, &v19, &v26, &v27, m8, m9, 0u, 0u);
-       G(&v4, &v5, &v12, &v13, &v20, &v21, &v28, &v29, 0u, 0u, 0u, 0u);
-       G(&v6, &v7, &v14, &v15, &v22, &v23, &v30, &v31, 0u, 0u, 0u, 0u);
-       G(&v0, &v1, &v10, &v11, &v20, &v21, &v30, &v31, m2, m3, 0u, 0u);
-       G(&v2, &v3, &v12, &v13, &v22, &v23, &v24, &v25, m0, m1, m4, m5);
-       G(&v4, &v5, &v14, &v15, &v16, &v17, &v26, &v27, 0u, 0u, 0u, 0u);
-       G(&v6, &v7, &v8, &v9, &v18, &v19, &v28, &v29, 0u, 0u, m6, m7);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
 
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
 
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
 
-       /****************************************************************************
-       *                                                                                                                               ROUND(2)                                                                                                                                        *
-       ****************************************************************************/
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
 
-       G(&v0, &v1, &v8, &v9, &v16, &v17, &v24, &v25, 0u, 0u, 0u, 0u);
-       G(&v2, &v3, &v10, &v11, &v18, &v19, &v26, &v27, 0u, 0u, m0, m1);
-       G(&v4, &v5, &v12, &v13, &v20, &v21, &v28, &v29, 0u, 0u, m4, m5);
-       G(&v6, &v7, &v14, &v15, &v22, &v23, &v30, &v31, 0u, 0u, 0u, 0u);
-       G(&v0, &v1, &v10, &v11, &v20, &v21, &v30, &v31, 0u, 0u, 0u, 0u);
-       G(&v2, &v3, &v12, &v13, &v22, &v23, &v24, &v25, m6, m7, 0u, 0u);
-       G(&v4, &v5, &v14, &v15, &v16, &v17, &v26, &v27, 0u, 0u, m2, m3);
-       G(&v6, &v7, &v8, &v9, &v18, &v19, &v28, &v29, 0u, 0u, m8, m9);
 
 
 
-       /****************************************************************************
-       *                                                                                                                               ROUND(3)                                                                                                                                        *
-       ****************************************************************************/
 
-       G(&v0, &v1, &v8, &v9, &v16, &v17, &v24, &v25, 0u, 0u, 0u, 0u);
-       G(&v2, &v3, &v10, &v11, &v18, &v19, &v26, &v27, m6, m7, m2, m3);
        G(&v4, &v5, &v12, &v13, &v20, &v21, &v28, &v29, 0u, 0u, 0u, 0u);
-       G(&v6, &v7, &v14, &v15, &v22, &v23, &v30, &v31, 0u, 0u, 0u, 0u);
-       G(&v0, &v1, &v10, &v11, &v20, &v21, &v30, &v31, m4, m5, 0u, 0u);
-       G(&v2, &v3, &v12, &v13, &v22, &v23, &v24, &v25, 0u, 0u, 0u, 0u);
-       G(&v4, &v5, &v14, &v15, &v16, &v17, &v26, &v27, m8, m9, m0, m1);
-       G(&v6, &v7, &v8, &v9, &v18, &v19, &v28, &v29, 0u, 0u, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
 
 
 
-       /****************************************************************************
-       *                                                                                                                               ROUND(4)                                                                                                                                        *
-       ****************************************************************************/
 
-       G(&v0, &v1, &v8, &v9, &v16, &v17, &v24, &v25, 0u, 0u, m0, m1);
-       G(&v2, &v3, &v10, &v11, &v18, &v19, &v26, &v27, 0u, 0u, 0u, 0u);
-       G(&v4, &v5, &v12, &v13, &v20, &v21, &v28, &v29, m4, m5, m8, m9);
        G(&v6, &v7, &v14, &v15, &v22, &v23, &v30, &v31, 0u, 0u, 0u, 0u);
-       G(&v0, &v1, &v10, &v11, &v20, &v21, &v30, &v31, 0u, 0u, m2, m3);
-       G(&v2, &v3, &v12, &v13, &v22, &v23, &v24, &v25, 0u, 0u, 0u, 0u);
-       G(&v4, &v5, &v14, &v15, &v16, &v17, &v26, &v27, 0u, 0u, 0u, 0u);
-       G(&v6, &v7, &v8, &v9, &v18, &v19, &v28, &v29, m6, m7, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
 
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
 
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
 
-       /****************************************************************************
-       *                                                                                                                               ROUND(5)                                                                                                                                        *
-       ****************************************************************************/
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
 
-       G(&v0, &v1, &v8, &v9, &v16, &v17, &v24, &v25, m4, m5, 0u, 0u);
-       G(&v2, &v3, &v10, &v11, &v18, &v19, &v26, &v27, 0u, 0u, 0u, 0u);
-       G(&v4, &v5, &v12, &v13, &v20, &v21, &v28, &v29, m0, m1, 0u, 0u);
-       G(&v6, &v7, &v14, &v15, &v22, &v23, &v30, &v31, 0u, 0u, m6, m7);
-       G(&v0, &v1, &v10, &v11, &v20, &v21, &v30, &v31, m8, m9, 0u, 0u);
-       G(&v2, &v3, &v12, &v13, &v22, &v23, &v24, &v25, 0u, 0u, 0u, 0u);
-       G(&v4, &v5, &v14, &v15, &v16, &v17, &v26, &v27, 0u, 0u, 0u, 0u);
-       G(&v6, &v7, &v8, &v9, &v18, &v19, &v28, &v29, m2, m3, 0u, 0u);
 
 
 
-       /****************************************************************************
-       *                                                                                                                               ROUND(6)                                                                                                                                        *
-       ****************************************************************************/
 
-       G(&v0, &v1, &v8, &v9, &v16, &v17, &v24, &v25, 0u, 0u, 0u, 0u);
-       G(&v2, &v3, &v10, &v11, &v18, &v19, &v26, &v27, m2, m3, 0u, 0u);
-       G(&v4, &v5, &v12, &v13, &v20, &v21, &v28, &v29, 0u, 0u, 0u, 0u);
-       G(&v6, &v7, &v14, &v15, &v22, &v23, &v30, &v31, m8, m9, 0u, 0u);
-       G(&v0, &v1, &v10, &v11, &v20, &v21, &v30, &v31, m0, m1, 0u, 0u);
-       G(&v2, &v3, &v12, &v13, &v22, &v23, &v24, &v25, 0u, 0u, m6, m7);
-       G(&v4, &v5, &v14, &v15, &v16, &v17, &v26, &v27, 0u, 0u, m4, m5);
-       G(&v6, &v7, &v8, &v9, &v18, &v19, &v28, &v29, 0u, 0u, 0u, 0u);
+       G(&v0, &v1, &v10, &v11, &v20, &v21, &v30, &v31, m2, m3, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
 
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
 
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
 
-       /****************************************************************************
-       *                                                                                                                               ROUND(7)                                                                                                                                        *
-       ****************************************************************************/
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
 
-       G(&v0, &v1, &v8, &v9, &v16, &v17, &v24, &v25, 0u, 0u, 0u, 0u);
-       G(&v2, &v3, &v10, &v11, &v18, &v19, &v26, &v27, 0u, 0u, 0u, 0u);
-       G(&v4, &v5, &v12, &v13, &v20, &v21, &v28, &v29, 0u, 0u, m2, m3);
-       G(&v6, &v7, &v14, &v15, &v22, &v23, &v30, &v31, m6, m7, 0u, 0u);
-       G(&v0, &v1, &v10, &v11, &v20, &v21, &v30, &v31, 0u, 0u, m0, m1);
-       G(&v2, &v3, &v12, &v13, &v22, &v23, &v24, &v25, 0u, 0u, m8, m9);
-       G(&v4, &v5, &v14, &v15, &v16, &v17, &v26, &v27, 0u, 0u, 0u, 0u);
-       G(&v6, &v7, &v8, &v9, &v18, &v19, &v28, &v29, m4, m5, 0u, 0u);
 
 
 
-       /****************************************************************************
-       *                                                                                                                               ROUND(8)                                                                                                                                        *
-       ****************************************************************************/
 
-       G(&v0, &v1, &v8, &v9, &v16, &v17, &v24, &v25, 0u, 0u, 0u, 0u);
-       G(&v2, &v3, &v10, &v11, &v18, &v19, &v26, &v27, 0u, 0u, 0u, 0u);
-       G(&v4, &v5, &v12, &v13, &v20, &v21, &v28, &v29, 0u, 0u, m6, m7);
-       G(&v6, &v7, &v14, &v15, &v22, &v23, &v30, &v31, m0, m1, 0u, 0u);
-       G(&v0, &v1, &v10, &v11, &v20, &v21, &v30, &v31, 0u, 0u, m4, m5);
-       G(&v2, &v3, &v12, &v13, &v22, &v23, &v24, &v25, 0u, 0u, 0u, 0u);
-       G(&v4, &v5, &v14, &v15, &v16, &v17, &v26, &v27, m2, m3, m8, m9);
-       G(&v6, &v7, &v8, &v9, &v18, &v19, &v28, &v29, 0u, 0u, 0u, 0u);
+       G(&v2, &v3, &v12, &v13, &v22, &v23, &v24, &v25, m0, m1, m4, m5);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
 
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
 
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
 
-       /****************************************************************************
-       *                                                                                                                               ROUND(9)                                                                                                                                        *
-       ****************************************************************************/
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
 
-       G(&v0, &v1, &v8, &v9, &v16, &v17, &v24, &v25, 0u, 0u, m4, m5);
-       G(&v2, &v3, &v10, &v11, &v18, &v19, &v26, &v27, 0u, 0u, m8, m9);
-       G(&v4, &v5, &v12, &v13, &v20, &v21, &v28, &v29, 0u, 0u, 0u, 0u);
-       G(&v6, &v7, &v14, &v15, &v22, &v23, &v30, &v31, m2, m3, 0u, 0u);
-       G(&v0, &v1, &v10, &v11, &v20, &v21, &v30, &v31, 0u, 0u, 0u, 0u);
-       G(&v2, &v3, &v12, &v13, &v22, &v23, &v24, &v25, 0u, 0u, 0u, 0u);
-       G(&v4, &v5, &v14, &v15, &v16, &v17, &v26, &v27, m6, m7, 0u, 0u);
-       G(&v6, &v7, &v8, &v9, &v18, &v19, &v28, &v29, 0u, 0u, m0, m1);
 
 
 
-       /****************************************************************************
-       *                                                                                                                               ROUND(10)                                                                                                                                       *
-       ****************************************************************************/
 
-       G(&v0, &v1, &v8, &v9, &v16, &v17, &v24, &v25, m0, m1, m2, m3);
-       G(&v2, &v3, &v10, &v11, &v18, &v19, &v26, &v27, m4, m5, m6, m7);
-       G(&v4, &v5, &v12, &v13, &v20, &v21, &v28, &v29, m8, m9, 0u, 0u);
-       G(&v6, &v7, &v14, &v15, &v22, &v23, &v30, &v31, 0u, 0u, 0u, 0u);
-       G(&v0, &v1, &v10, &v11, &v20, &v21, &v30, &v31, 0u, 0u, 0u, 0u);
-       G(&v2, &v3, &v12, &v13, &v22, &v23, &v24, &v25, 0u, 0u, 0u, 0u);
        G(&v4, &v5, &v14, &v15, &v16, &v17, &v26, &v27, 0u, 0u, 0u, 0u);
-       G(&v6, &v7, &v8, &v9, &v18, &v19, &v28, &v29, 0u, 0u, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
 
 
 
-       /****************************************************************************
-       *                                                                                                                               ROUND(11)                                                                                                                                       *
-       ****************************************************************************/
 
-       G(&v0, &v1, &v8, &v9, &v16, &v17, &v24, &v25, 0u, 0u, 0u, 0u);
-       G(&v2, &v3, &v10, &v11, &v18, &v19, &v26, &v27, m8, m9, 0u, 0u);
-       G(&v4, &v5, &v12, &v13, &v20, &v21, &v28, &v29, 0u, 0u, 0u, 0u);
-       G(&v6, &v7, &v14, &v15, &v22, &v23, &v30, &v31, 0u, 0u, 0u, 0u);
-       G(&v0, &v1, &v10, &v11, &v20, &v21, &v30, &v31, m2, m3, 0u, 0u);
-       G(&v2, &v3, &v12, &v13, &v22, &v23, &v24, &v25, m0, m1, m4, m5);
-       G(&v4, &v5, &v14, &v15, &v16, &v17, &v26, &v27, 0u, 0u, 0u, 0u);
        G(&v6, &v7, &v8, &v9, &v18, &v19, &v28, &v29, 0u, 0u, m6, m7);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
 
 
 
        /****************************************************************************
-       *                                                                                                                       NONCE CHECK                                                                                                                                     *
+       *                                                                                                                               ROUND(2)                                                                                                                                        *
        ****************************************************************************/
 
-       /**
-       * Set nonce if it passes the threshold and no other thread has set it
+       G(&v0, &v1, &v8, &v9, &v16, &v17, &v24, &v25, 0u, 0u, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v2, &v3, &v10, &v11, &v18, &v19, &v26, &v27, 0u, 0u, m0, m1);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v4, &v5, &v12, &v13, &v20, &v21, &v28, &v29, 0u, 0u, m4, m5);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v6, &v7, &v14, &v15, &v22, &v23, &v30, &v31, 0u, 0u, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v0, &v1, &v10, &v11, &v20, &v21, &v30, &v31, 0u, 0u, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v2, &v3, &v12, &v13, &v22, &v23, &v24, &v25, m6, m7, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v4, &v5, &v14, &v15, &v16, &v17, &v26, &v27, 0u, 0u, m2, m3);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v6, &v7, &v8, &v9, &v18, &v19, &v28, &v29, 0u, 0u, m8, m9);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       /****************************************************************************
+       *                                                                                                                               ROUND(3)                                                                                                                                        *
+       ****************************************************************************/
+
+       G(&v0, &v1, &v8, &v9, &v16, &v17, &v24, &v25, 0u, 0u, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v2, &v3, &v10, &v11, &v18, &v19, &v26, &v27, m6, m7, m2, m3);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v4, &v5, &v12, &v13, &v20, &v21, &v28, &v29, 0u, 0u, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v6, &v7, &v14, &v15, &v22, &v23, &v30, &v31, 0u, 0u, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v0, &v1, &v10, &v11, &v20, &v21, &v30, &v31, m4, m5, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v2, &v3, &v12, &v13, &v22, &v23, &v24, &v25, 0u, 0u, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v4, &v5, &v14, &v15, &v16, &v17, &v26, &v27, m8, m9, m0, m1);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v6, &v7, &v8, &v9, &v18, &v19, &v28, &v29, 0u, 0u, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       /****************************************************************************
+       *                                                                                                                               ROUND(4)                                                                                                                                        *
+       ****************************************************************************/
+
+       G(&v0, &v1, &v8, &v9, &v16, &v17, &v24, &v25, 0u, 0u, m0, m1);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v2, &v3, &v10, &v11, &v18, &v19, &v26, &v27, 0u, 0u, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v4, &v5, &v12, &v13, &v20, &v21, &v28, &v29, m4, m5, m8, m9);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v6, &v7, &v14, &v15, &v22, &v23, &v30, &v31, 0u, 0u, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v0, &v1, &v10, &v11, &v20, &v21, &v30, &v31, 0u, 0u, m2, m3);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v2, &v3, &v12, &v13, &v22, &v23, &v24, &v25, 0u, 0u, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v4, &v5, &v14, &v15, &v16, &v17, &v26, &v27, 0u, 0u, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v6, &v7, &v8, &v9, &v18, &v19, &v28, &v29, m6, m7, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       /****************************************************************************
+       *                                                                                                                               ROUND(5)                                                                                                                                        *
+       ****************************************************************************/
+
+       G(&v0, &v1, &v8, &v9, &v16, &v17, &v24, &v25, m4, m5, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v2, &v3, &v10, &v11, &v18, &v19, &v26, &v27, 0u, 0u, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v4, &v5, &v12, &v13, &v20, &v21, &v28, &v29, m0, m1, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v6, &v7, &v14, &v15, &v22, &v23, &v30, &v31, 0u, 0u, m6, m7);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v0, &v1, &v10, &v11, &v20, &v21, &v30, &v31, m8, m9, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v2, &v3, &v12, &v13, &v22, &v23, &v24, &v25, 0u, 0u, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v4, &v5, &v14, &v15, &v16, &v17, &v26, &v27, 0u, 0u, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v6, &v7, &v8, &v9, &v18, &v19, &v28, &v29, m2, m3, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       /****************************************************************************
+       *                                                                                                                               ROUND(6)                                                                                                                                        *
+       ****************************************************************************/
+
+       G(&v0, &v1, &v8, &v9, &v16, &v17, &v24, &v25, 0u, 0u, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v2, &v3, &v10, &v11, &v18, &v19, &v26, &v27, m2, m3, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v4, &v5, &v12, &v13, &v20, &v21, &v28, &v29, 0u, 0u, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v6, &v7, &v14, &v15, &v22, &v23, &v30, &v31, m8, m9, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v0, &v1, &v10, &v11, &v20, &v21, &v30, &v31, m0, m1, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v2, &v3, &v12, &v13, &v22, &v23, &v24, &v25, 0u, 0u, m6, m7);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v4, &v5, &v14, &v15, &v16, &v17, &v26, &v27, 0u, 0u, m4, m5);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v6, &v7, &v8, &v9, &v18, &v19, &v28, &v29, 0u, 0u, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       /****************************************************************************
+       *                                                                                                                               ROUND(7)                                                                                                                                        *
+       ****************************************************************************/
+
+       G(&v0, &v1, &v8, &v9, &v16, &v17, &v24, &v25, 0u, 0u, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v2, &v3, &v10, &v11, &v18, &v19, &v26, &v27, 0u, 0u, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v4, &v5, &v12, &v13, &v20, &v21, &v28, &v29, 0u, 0u, m2, m3);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v6, &v7, &v14, &v15, &v22, &v23, &v30, &v31, m6, m7, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v0, &v1, &v10, &v11, &v20, &v21, &v30, &v31, 0u, 0u, m0, m1);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v2, &v3, &v12, &v13, &v22, &v23, &v24, &v25, 0u, 0u, m8, m9);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v4, &v5, &v14, &v15, &v16, &v17, &v26, &v27, 0u, 0u, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v6, &v7, &v8, &v9, &v18, &v19, &v28, &v29, m4, m5, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       /****************************************************************************
+       *                                                                                                                               ROUND(8)                                                                                                                                        *
+       ****************************************************************************/
+
+       G(&v0, &v1, &v8, &v9, &v16, &v17, &v24, &v25, 0u, 0u, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v2, &v3, &v10, &v11, &v18, &v19, &v26, &v27, 0u, 0u, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v4, &v5, &v12, &v13, &v20, &v21, &v28, &v29, 0u, 0u, m6, m7);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v6, &v7, &v14, &v15, &v22, &v23, &v30, &v31, m0, m1, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v0, &v1, &v10, &v11, &v20, &v21, &v30, &v31, 0u, 0u, m4, m5);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v2, &v3, &v12, &v13, &v22, &v23, &v24, &v25, 0u, 0u, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v4, &v5, &v14, &v15, &v16, &v17, &v26, &v27, m2, m3, m8, m9);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v6, &v7, &v8, &v9, &v18, &v19, &v28, &v29, 0u, 0u, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       /****************************************************************************
+       *                                                                                                                               ROUND(9)                                                                                                                                        *
+       ****************************************************************************/
+
+       G(&v0, &v1, &v8, &v9, &v16, &v17, &v24, &v25, 0u, 0u, m4, m5);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v2, &v3, &v10, &v11, &v18, &v19, &v26, &v27, 0u, 0u, m8, m9);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v4, &v5, &v12, &v13, &v20, &v21, &v28, &v29, 0u, 0u, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v6, &v7, &v14, &v15, &v22, &v23, &v30, &v31, m2, m3, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v0, &v1, &v10, &v11, &v20, &v21, &v30, &v31, 0u, 0u, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v2, &v3, &v12, &v13, &v22, &v23, &v24, &v25, 0u, 0u, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v4, &v5, &v14, &v15, &v16, &v17, &v26, &v27, m6, m7, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v6, &v7, &v8, &v9, &v18, &v19, &v28, &v29, 0u, 0u, m0, m1);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       /****************************************************************************
+       *                                                                                                                               ROUND(10)                                                                                                                                       *
+       ****************************************************************************/
+
+       G(&v0, &v1, &v8, &v9, &v16, &v17, &v24, &v25, m0, m1, m2, m3);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v2, &v3, &v10, &v11, &v18, &v19, &v26, &v27, m4, m5, m6, m7);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v4, &v5, &v12, &v13, &v20, &v21, &v28, &v29, m8, m9, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v6, &v7, &v14, &v15, &v22, &v23, &v30, &v31, 0u, 0u, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v0, &v1, &v10, &v11, &v20, &v21, &v30, &v31, 0u, 0u, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v2, &v3, &v12, &v13, &v22, &v23, &v24, &v25, 0u, 0u, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v4, &v5, &v14, &v15, &v16, &v17, &v26, &v27, 0u, 0u, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v6, &v7, &v8, &v9, &v18, &v19, &v28, &v29, 0u, 0u, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       /****************************************************************************
+       *                                                                                                                               ROUND(11)                                                                                                                                       *
+       ****************************************************************************/
+
+       G(&v0, &v1, &v8, &v9, &v16, &v17, &v24, &v25, 0u, 0u, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v2, &v3, &v10, &v11, &v18, &v19, &v26, &v27, m8, m9, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v4, &v5, &v12, &v13, &v20, &v21, &v28, &v29, 0u, 0u, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v6, &v7, &v14, &v15, &v22, &v23, &v30, &v31, 0u, 0u, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v0, &v1, &v10, &v11, &v20, &v21, &v30, &v31, m2, m3, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v2, &v3, &v12, &v13, &v22, &v23, &v24, &v25, m0, m1, m4, m5);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v4, &v5, &v14, &v15, &v16, &v17, &v26, &v27, 0u, 0u, 0u, 0u);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       G(&v6, &v7, &v8, &v9, &v18, &v19, &v28, &v29, 0u, 0u, m6, m7);
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+0]]
+       // o0 = va0 + mx0;
+       // o1 = va1 + mx1;
+       // if (va0 > 0xFFFFFFFFu - mx0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 32)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = xor1;
+       // vd1 = xor0;
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 24)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor0 >> 24u) ^ (xor1 << 8u);
+       // vb1 = (xor1 >> 24u) ^ (xor0 << 8u);
+
+       // // a = a + b
+       // o0 = va0 + vb0;
+       // o1 = va1 + vb1;
+       // if (va0 > 0xFFFFFFFFu - vb0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // a = a + m[sigma[r][2*i+1]]
+       // o0 = va0 + my0;
+       // o1 = va1 + my1;
+       // if (va0 > 0xFFFFFFFFu - my0) {
+       //      o1 = o1 + 1u;
+       // }
+       // va0 = o0;
+       // va1 = o1;
+
+       // // d = rotr64(d ^ a, 16)
+       // xor0 = vd0 ^ va0;
+       // xor1 = vd1 ^ va1;
+       // vd0 = (xor0 >> 16u) ^ (xor1 << 16u);
+       // vd1 = (xor1 >> 16u) ^ (xor0 << 16u);
+
+       // // c = c + d
+       // o0 = vc0 + vd0;
+       // o1 = vc1 + vd1;
+       // if (vc0 > 0xFFFFFFFFu - vd0) {
+       //      o1 = o1 + 1u;
+       // }
+       // vc0 = o0;
+       // vc1 = o1;
+
+       // // b = rotr64(b ^ c, 63)
+       // xor0 = vb0 ^ vc0;
+       // xor1 = vb1 ^ vc1;
+       // vb0 = (xor1 >> 31u) ^ (xor0 << 1u);
+       // vb1 = (xor0 >> 31u) ^ (xor1 << 1u);
+
+
+
+
+
+       /****************************************************************************
+       *                                                                                                                       NONCE CHECK                                                                                                                                     *
+       ****************************************************************************/
+
+       /**
+       * Set nonce if it passes the threshold and no other thread has set it
        */
        if ((BLAKE2B_IV32_1 ^ v1 ^ v17) > threshold && atomicLoad(&work.found) == 0u) {
                atomicStore(&work.found, 1u);
@@ -4790,6 +11975,7 @@ var init_gpu = __esm({
     init_shaders();
     NanoPowGpu = class {
       // Initialize WebGPU
+      static #busy = false;
       static #device = null;
       static #uboBuffer;
       static #gpuBuffer;
@@ -4800,66 +11986,79 @@ var init_gpu = __esm({
         this.init();
       }
       // Initialize WebGPU
-      static init() {
+      static async init() {
+        if (this.#busy) return;
+        this.#busy = true;
         if (navigator.gpu == null) {
           throw new Error("WebGPU is not supported in this browser.");
         }
-        navigator.gpu.requestAdapter().then((adapter) => {
+        try {
+          const adapter = await navigator.gpu.requestAdapter();
           if (adapter == null) {
             throw new Error("WebGPU adapter refused by browser.");
           }
-          adapter.requestDevice().then((device) => {
-            this.#device = device;
-            this.#device.lost.then((loss) => {
-              console.dir(loss);
-              console.warn(loss.reason, loss.message);
-              console.warn(`Device lost. Reinitializing...`);
-              this.init();
-            });
-            this.#uboBuffer = this.#device.createBuffer({
-              size: 48,
-              usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST
-            });
-            this.#gpuBuffer = this.#device.createBuffer({
-              size: 16,
-              usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC
-            });
-            this.#cpuBuffer = this.#device.createBuffer({
-              size: 16,
-              usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ
-            });
-            this.#bindGroupLayout = this.#device.createBindGroupLayout({
-              entries: [
-                {
-                  binding: 0,
-                  visibility: GPUShaderStage.COMPUTE,
-                  buffer: {
-                    type: "uniform"
-                  }
-                },
-                {
-                  binding: 1,
-                  visibility: GPUShaderStage.COMPUTE,
-                  buffer: {
-                    type: "storage"
-                  }
-                }
-              ]
-            });
-            this.#pipeline = this.#device.createComputePipeline({
-              layout: this.#device.createPipelineLayout({
-                bindGroupLayouts: [this.#bindGroupLayout]
-              }),
-              compute: {
-                entryPoint: "main",
-                module: this.#device.createShaderModule({
-                  code: NanoPowGpuComputeShader
-                })
-              }
-            });
+          const device = await adapter.requestDevice();
+          if (!(device instanceof GPUDevice)) {
+            throw new Error("WebGPU device failed to load.");
+          }
+          device.lost.then((loss) => {
+            console.dir(loss);
+            console.warn(`Device lost. Reinitializing...`);
+            this.#cpuBuffer?.destroy();
+            this.#gpuBuffer?.destroy();
+            this.#uboBuffer?.destroy();
+            this.init();
           });
-        }).catch((err) => {
-          throw new Error(err.message);
+          this.#device = device;
+          this.setup();
+        } catch (err) {
+          throw new Error(`WebGPU initialization failed. ${err}`);
+        } finally {
+          this.#busy = false;
+        }
+      }
+      static setup() {
+        if (this.#device == null) throw new Error(`WebGPU device failed to load.`);
+        this.#uboBuffer = this.#device.createBuffer({
+          size: 48,
+          usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST
+        });
+        this.#gpuBuffer = this.#device.createBuffer({
+          size: 16,
+          usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC
+        });
+        this.#cpuBuffer = this.#device.createBuffer({
+          size: 16,
+          usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ
+        });
+        this.#bindGroupLayout = this.#device.createBindGroupLayout({
+          entries: [
+            {
+              binding: 0,
+              visibility: GPUShaderStage.COMPUTE,
+              buffer: {
+                type: "uniform"
+              }
+            },
+            {
+              binding: 1,
+              visibility: GPUShaderStage.COMPUTE,
+              buffer: {
+                type: "storage"
+              }
+            }
+          ]
+        });
+        this.#pipeline = this.#device.createComputePipeline({
+          layout: this.#device.createPipelineLayout({
+            bindGroupLayouts: [this.#bindGroupLayout]
+          }),
+          compute: {
+            entryPoint: "main",
+            module: this.#device.createShaderModule({
+              code: NanoPowGpuComputeShader
+            })
+          }
         });
       }
       /**
@@ -4869,71 +12068,83 @@ var init_gpu = __esm({
       * @param {number} [threshold=0xfffffff8] - Difficulty of proof-of-work calculation
       */
       static async search(hash2, threshold = 4294967288) {
+        if (this.#busy) {
+          return new Promise((resolve) => {
+            setTimeout(async () => {
+              const result = this.search(hash2, threshold);
+              resolve(result);
+            }, 100);
+          });
+        }
+        this.#busy = true;
         if (!/^[A-Fa-f0-9]{64}$/.test(hash2)) throw new TypeError(`Invalid hash ${hash2}`);
         if (typeof threshold !== "number") throw new TypeError(`Invalid threshold ${threshold}`);
-        while (this.#device == null && performance.now() < 8e3) {
+        let loads = 0;
+        while (this.#device == null && loads < 20) {
           await new Promise((resolve) => {
             setTimeout(resolve, 500);
           });
         }
         if (this.#device == null) throw new Error(`WebGPU device failed to load.`);
-        const uboView = new DataView(new ArrayBuffer(48));
-        for (let i = 0; i < 64; i += 8) {
-          const uint32 = hash2.slice(i, i + 8);
-          uboView.setUint32(i / 2, parseInt(uint32, 16));
-        }
-        const random = Math.floor(Math.random() * 4294967295);
-        uboView.setUint32(32, random, true);
-        uboView.setUint32(36, threshold, true);
-        this.#device.queue.writeBuffer(this.#uboBuffer, 0, uboView);
-        this.#device.queue.writeBuffer(this.#gpuBuffer, 8, new Uint32Array([0]));
-        const bindGroup = this.#device.createBindGroup({
-          layout: this.#bindGroupLayout,
-          entries: [
-            {
-              binding: 0,
-              resource: {
-                buffer: this.#uboBuffer
-              }
-            },
-            {
-              binding: 1,
-              resource: {
-                buffer: this.#gpuBuffer
-              }
-            }
-          ]
-        });
-        const commandEncoder = this.#device.createCommandEncoder();
-        const passEncoder = commandEncoder.beginComputePass();
-        passEncoder.setPipeline(this.#pipeline);
-        passEncoder.setBindGroup(0, bindGroup);
-        passEncoder.dispatchWorkgroups(256, 256, 256);
-        passEncoder.end();
-        commandEncoder.copyBufferToBuffer(
-          this.#gpuBuffer,
-          0,
-          this.#cpuBuffer,
-          0,
-          12
-        );
-        this.#device.queue.submit([commandEncoder.finish()]);
-        await this.#cpuBuffer.mapAsync(GPUMapMode.READ);
-        await this.#device.queue.onSubmittedWorkDone();
+        let nonce = 0n;
+        let found = false;
         try {
-          const data = new DataView(this.#cpuBuffer.getMappedRange());
-          const nonce = data.getBigUint64(0, true);
-          const found = !!data.getUint32(8);
-          this.#cpuBuffer.unmap();
-          if (found) {
-            const hex2 = nonce.toString(16).padStart(16, "0");
-            return hex2;
-          } else {
-            return await this.search(hash2, threshold);
-          }
+          do {
+            const uboView = new DataView(new ArrayBuffer(48));
+            for (let i = 0; i < 64; i += 8) {
+              const uint32 = hash2.slice(i, i + 8);
+              uboView.setUint32(i / 2, parseInt(uint32, 16));
+            }
+            const random = Math.floor(Math.random() * 4294967295);
+            uboView.setUint32(32, random, true);
+            uboView.setUint32(36, threshold, true);
+            this.#device.queue.writeBuffer(this.#uboBuffer, 0, uboView);
+            this.#device.queue.writeBuffer(this.#gpuBuffer, 8, new Uint32Array([0]));
+            const bindGroup = this.#device.createBindGroup({
+              layout: this.#bindGroupLayout,
+              entries: [
+                {
+                  binding: 0,
+                  resource: {
+                    buffer: this.#uboBuffer
+                  }
+                },
+                {
+                  binding: 1,
+                  resource: {
+                    buffer: this.#gpuBuffer
+                  }
+                }
+              ]
+            });
+            const commandEncoder = this.#device.createCommandEncoder();
+            const passEncoder = commandEncoder.beginComputePass();
+            passEncoder.setPipeline(this.#pipeline);
+            passEncoder.setBindGroup(0, bindGroup);
+            passEncoder.dispatchWorkgroups(256, 256, 256);
+            passEncoder.end();
+            commandEncoder.copyBufferToBuffer(
+              this.#gpuBuffer,
+              0,
+              this.#cpuBuffer,
+              0,
+              12
+            );
+            this.#device.queue.submit([commandEncoder.finish()]);
+            await this.#cpuBuffer.mapAsync(GPUMapMode.READ);
+            await this.#device.queue.onSubmittedWorkDone();
+            const dataBuffer = this.#cpuBuffer.getMappedRange().slice(0);
+            this.#cpuBuffer.unmap();
+            if (dataBuffer == null) throw new Error(`Failed to get data from buffer.`);
+            const dataView = new DataView(dataBuffer);
+            nonce = dataView.getBigUint64(0, true);
+            found = !!dataView.getUint32(8);
+          } while (!found);
         } catch (err) {
-          console.warn(`Error getting data from GPU, retrying. ${err}`);
-          return await this.search(hash2, threshold);
+          console.warn(`Error getting data from GPU. ${err}`);
+        } finally {
+          this.#busy = false;
+          return nonce.toString(16).padStart(16, "0");
         }
       }
     };
index c8ffa100b4be3a4846f617a13b62cb35974afdcd..32253b55bfa02db31c976194dfbd3e91babe12c8 100644 (file)
                        )
                        for (let i = 0; i < 0x10; i++) {
                                const start = performance.now()
-                               await block.pow()
+                               try {
+                                       await block.pow()
+                               } catch (err) {
+                                       works.innerHTML += `<br/><pre>${JSON.stringify(err)}</pre><br/>`
+                               }
                                const end = performance.now()
                                times.push(end - start)
                                works.innerHTML += `${block.work} (${end - start} ms)<br/>`
-                               console.log(block.work)
+                               console.log(`${block.work} (${end - start} ms)`)
                        }
                        let sum = 0, reciprocals = 0, logarithms = 0, count = times.length, min = 0xffff, max = 0
                        for (let i = 0; i < count; i++) {