R2
R2(A,B,C,D,X( 0), 3,0x6ED9EBA1L);
R2(D,A,B,C,X( 8), 9,0x6ED9EBA1L);
R2(C,D,A,B,X( 4),11,0x6ED9EBA1L);
R2(B,C,D,A,X(12),15,0x6ED9EBA1L);
R2(A,B,C,D,X( 2), 3,0x6ED9EBA1L);
R2(D,A,B,C,X(10), 9,0x6ED9EBA1L);
R2(C,D,A,B,X( 6),11,0x6ED9EBA1L);
R2(B,C,D,A,X(14),15,0x6ED9EBA1L);
R2(A,B,C,D,X( 1), 3,0x6ED9EBA1L);
R2(D,A,B,C,X( 9), 9,0x6ED9EBA1L);
R2(C,D,A,B,X( 5),11,0x6ED9EBA1L);
R2(B,C,D,A,X(13),15,0x6ED9EBA1L);
R2(A,B,C,D,X( 3), 3,0x6ED9EBA1L);
R2(D,A,B,C,X(11), 9,0x6ED9EBA1L);
R2(C,D,A,B,X( 7),11,0x6ED9EBA1L);
R2(B,C,D,A,X(15),15,0x6ED9EBA1L);
R2(A,B,C,D,X( 5), 4,0xfffa3942L);
R2(D,A,B,C,X( 8),11,0x8771f681L);
R2(C,D,A,B,X(11),16,0x6d9d6122L);
R2(B,C,D,A,X(14),23,0xfde5380cL);
R2(A,B,C,D,X( 1), 4,0xa4beea44L);
R2(D,A,B,C,X( 4),11,0x4bdecfa9L);
R2(C,D,A,B,X( 7),16,0xf6bb4b60L);
R2(B,C,D,A,X(10),23,0xbebfbc70L);
R2(A,B,C,D,X(13), 4,0x289b7ec6L);
R2(D,A,B,C,X( 0),11,0xeaa127faL);
R2(C,D,A,B,X( 3),16,0xd4ef3085L);
R2(B,C,D,A,X( 6),23,0x04881d05L);
R2(A,B,C,D,X( 9), 4,0xd9d4d039L);
R2(D,A,B,C,X(12),11,0xe6db99e5L);
R2(C,D,A,B,X(15),16,0x1fa27cf8L);
R2(B,C,D,A,X( 2),23,0xc4ac5665L);
R2(A, B, C, D, E, F, G, H, 0x9d8a7a87, W00, W00 ^ W04);
R2(D, A, B, C, H, E, F, G, 0x3b14f50f, W01, W01 ^ W05);
R2(C, D, A, B, G, H, E, F, 0x7629ea1e, W02, W02 ^ W06);
R2(B, C, D, A, F, G, H, E, 0xec53d43c, W03, W03 ^ W07);
R2(A, B, C, D, E, F, G, H, 0xd8a7a879, W04, W04 ^ W08);
R2(D, A, B, C, H, E, F, G, 0xb14f50f3, W05, W05 ^ W09);
R2(C, D, A, B, G, H, E, F, 0x629ea1e7, W06, W06 ^ W10);
R2(B, C, D, A, F, G, H, E, 0xc53d43ce, W07, W07 ^ W11);
R2(A, B, C, D, E, F, G, H, 0x8a7a879d, W08, W08 ^ W12);
R2(D, A, B, C, H, E, F, G, 0x14f50f3b, W09, W09 ^ W13);
R2(C, D, A, B, G, H, E, F, 0x29ea1e76, W10, W10 ^ W14);
R2(B, C, D, A, F, G, H, E, 0x53d43cec, W11, W11 ^ W15);
R2(A, B, C, D, E, F, G, H, 0xa7a879d8, W12, W12 ^ W00);
R2(D, A, B, C, H, E, F, G, 0x4f50f3b1, W13, W13 ^ W01);
R2(C, D, A, B, G, H, E, F, 0x9ea1e762, W14, W14 ^ W02);
R2(B, C, D, A, F, G, H, E, 0x3d43cec5, W15, W15 ^ W03);
R2(A, B, C, D, E, F, G, H, 0x7a879d8a, W00, W00 ^ W04);
R2(D, A, B, C, H, E, F, G, 0xf50f3b14, W01, W01 ^ W05);
R2(C, D, A, B, G, H, E, F, 0xea1e7629, W02, W02 ^ W06);
R2(B, C, D, A, F, G, H, E, 0xd43cec53, W03, W03 ^ W07);
R2(A, B, C, D, E, F, G, H, 0xa879d8a7, W04, W04 ^ W08);
R2(D, A, B, C, H, E, F, G, 0x50f3b14f, W05, W05 ^ W09);
R2(C, D, A, B, G, H, E, F, 0xa1e7629e, W06, W06 ^ W10);
R2(B, C, D, A, F, G, H, E, 0x43cec53d, W07, W07 ^ W11);
R2(A, B, C, D, E, F, G, H, 0x879d8a7a, W08, W08 ^ W12);
R2(D, A, B, C, H, E, F, G, 0x0f3b14f5, W09, W09 ^ W13);
R2(C, D, A, B, G, H, E, F, 0x1e7629ea, W10, W10 ^ W14);
R2(B, C, D, A, F, G, H, E, 0x3cec53d4, W11, W11 ^ W15);
R2(A, B, C, D, E, F, G, H, 0x79d8a7a8, W12, W12 ^ W00);
R2(D, A, B, C, H, E, F, G, 0xf3b14f50, W13, W13 ^ W01);
R2(C, D, A, B, G, H, E, F, 0xe7629ea1, W14, W14 ^ W02);
R2(B, C, D, A, F, G, H, E, 0xcec53d43, W15, W15 ^ W03);
R2(A, B, C, D, E, F, G, H, 0x9d8a7a87, W00, W00 ^ W04);
R2(D, A, B, C, H, E, F, G, 0x3b14f50f, W01, W01 ^ W05);
R2(C, D, A, B, G, H, E, F, 0x7629ea1e, W02, W02 ^ W06);
R2(B, C, D, A, F, G, H, E, 0xec53d43c, W03, W03 ^ W07);
R2(A, B, C, D, E, F, G, H, 0xd8a7a879, W04, W04 ^ W08);
R2(D, A, B, C, H, E, F, G, 0xb14f50f3, W05, W05 ^ W09);
R2(C, D, A, B, G, H, E, F, 0x629ea1e7, W06, W06 ^ W10);
R2(B, C, D, A, F, G, H, E, 0xc53d43ce, W07, W07 ^ W11);
R2(A, B, C, D, E, F, G, H, 0x8a7a879d, W08, W08 ^ W12);
R2(D, A, B, C, H, E, F, G, 0x14f50f3b, W09, W09 ^ W13);
R2(C, D, A, B, G, H, E, F, 0x29ea1e76, W10, W10 ^ W14);
R2(B, C, D, A, F, G, H, E, 0x53d43cec, W11, W11 ^ W15);
R2(A, B, C, D, E, F, G, H, 0xa7a879d8, W12, W12 ^ W00);
R2(D, A, B, C, H, E, F, G, 0x4f50f3b1, W13, W13 ^ W01);
R2(C, D, A, B, G, H, E, F, 0x9ea1e762, W14, W14 ^ W02);
R2(B, C, D, A, F, G, H, E, 0x3d43cec5, W15, W15 ^ W03);
uint16 R2[(len+1)/2];
Decode(R2,S,M2,(len+1)/2);
r += bottomt[i/2]*R2[i/2];
*out++ = R2[i/2];
uint16 R2[(len+1)/2];
R2[i/2] = r;
R2[i/2] = R[i];
Encode(out,R2,M2,(len+1)/2);