/* Template for recompress method; run through cpp. */

#define ROUND1_STEP(a, b, c, d, e, T) {e += s1(a,b,c,d,w2[T]); b = rotateLeft(b, 30);}
#define ROUND2_STEP(a, b, c, d, e, T) {e += s2(a,b,c,d,w2[T]); b = rotateLeft(b, 30);}
#define ROUND3_STEP(a, b, c, d, e, T) {e += s3(a,b,c,d,w2[T]); b = rotateLeft(b, 30);}
#define ROUND4_STEP(a, b, c, d, e, T) {e += s4(a,b,c,d,w2[T]); b = rotateLeft(b, 30);}

#define ROUND1_STEP_BW(a, b, c, d, e, T) {b = rotateRight(b, 30); e -= s1(a,b,c,d,w2[T]);}
#define ROUND2_STEP_BW(a, b, c, d, e, T) {b = rotateRight(b, 30); e -= s2(a,b,c,d,w2[T]);}
#define ROUND3_STEP_BW(a, b, c, d, e, T) {b = rotateRight(b, 30); e -= s3(a,b,c,d,w2[T]);}
#define ROUND4_STEP_BW(a, b, c, d, e, T) {b = rotateRight(b, 30); e -= s4(a,b,c,d,w2[T]);}

	/* Condition to go backwards: if (t > step) */
  /* t=80-66 have no identified DV; skip.
	ROUND4_STEP_BW(b, c, d, e, a, 79)
	ROUND4_STEP_BW(c, d, e, a, b, 78)
	ROUND4_STEP_BW(d, e, a, b, c, 77)
	ROUND4_STEP_BW(e, a, b, c, d, 76)
	ROUND4_STEP_BW(a, b, c, d, e, 75)
	ROUND4_STEP_BW(b, c, d, e, a, 74)
	ROUND4_STEP_BW(c, d, e, a, b, 73)
	ROUND4_STEP_BW(d, e, a, b, c, 72)
	ROUND4_STEP_BW(e, a, b, c, d, 71)
	ROUND4_STEP_BW(a, b, c, d, e, 70)
	ROUND4_STEP_BW(b, c, d, e, a, 69)
	ROUND4_STEP_BW(c, d, e, a, b, 68)
	ROUND4_STEP_BW(d, e, a, b, c, 67)
	ROUND4_STEP_BW(e, a, b, c, d, 66)
	ROUND4_STEP_BW(a, b, c, d, e, 65)
  */
  if (t == 65) {
	ROUND4_STEP_BW(b, c, d, e, a, 64)
	ROUND4_STEP_BW(c, d, e, a, b, 63)
	ROUND4_STEP_BW(d, e, a, b, c, 62)
	ROUND4_STEP_BW(e, a, b, c, d, 61)
	ROUND4_STEP_BW(a, b, c, d, e, 60)

	ROUND3_STEP_BW(b, c, d, e, a, 59)
	ROUND3_STEP_BW(c, d, e, a, b, 58)
  }
	ROUND3_STEP_BW(d, e, a, b, c, 57)
	ROUND3_STEP_BW(e, a, b, c, d, 56)
	ROUND3_STEP_BW(a, b, c, d, e, 55)
	ROUND3_STEP_BW(b, c, d, e, a, 54)
	ROUND3_STEP_BW(c, d, e, a, b, 53)
	ROUND3_STEP_BW(d, e, a, b, c, 52)
	ROUND3_STEP_BW(e, a, b, c, d, 51)
	ROUND3_STEP_BW(a, b, c, d, e, 50)
	ROUND3_STEP_BW(b, c, d, e, a, 49)
	ROUND3_STEP_BW(c, d, e, a, b, 48)
	ROUND3_STEP_BW(d, e, a, b, c, 47)
	ROUND3_STEP_BW(e, a, b, c, d, 46)
	ROUND3_STEP_BW(a, b, c, d, e, 45)
	ROUND3_STEP_BW(b, c, d, e, a, 44)
	ROUND3_STEP_BW(c, d, e, a, b, 43)
	ROUND3_STEP_BW(d, e, a, b, c, 42)
	ROUND3_STEP_BW(e, a, b, c, d, 41)
	ROUND3_STEP_BW(a, b, c, d, e, 40)

	ROUND2_STEP_BW(b, c, d, e, a, 39)
	ROUND2_STEP_BW(c, d, e, a, b, 38)
	ROUND2_STEP_BW(d, e, a, b, c, 37)
	ROUND2_STEP_BW(e, a, b, c, d, 36)
	ROUND2_STEP_BW(a, b, c, d, e, 35)
	ROUND2_STEP_BW(b, c, d, e, a, 34)
	ROUND2_STEP_BW(c, d, e, a, b, 33)
	ROUND2_STEP_BW(d, e, a, b, c, 32)
	ROUND2_STEP_BW(e, a, b, c, d, 31)
	ROUND2_STEP_BW(a, b, c, d, e, 30)
	ROUND2_STEP_BW(b, c, d, e, a, 29)
	ROUND2_STEP_BW(c, d, e, a, b, 28)
	ROUND2_STEP_BW(d, e, a, b, c, 27)
	ROUND2_STEP_BW(e, a, b, c, d, 26)
	ROUND2_STEP_BW(a, b, c, d, e, 25)
	ROUND2_STEP_BW(b, c, d, e, a, 24)
	ROUND2_STEP_BW(c, d, e, a, b, 23)
	ROUND2_STEP_BW(d, e, a, b, c, 22)
	ROUND2_STEP_BW(e, a, b, c, d, 21)
	ROUND2_STEP_BW(a, b, c, d, e, 20)

	ROUND1_STEP_BW(b, c, d, e, a, 19)
	ROUND1_STEP_BW(c, d, e, a, b, 18)
	ROUND1_STEP_BW(d, e, a, b, c, 17)
	ROUND1_STEP_BW(e, a, b, c, d, 16)
	ROUND1_STEP_BW(a, b, c, d, e, 15)
	ROUND1_STEP_BW(b, c, d, e, a, 14)
	ROUND1_STEP_BW(c, d, e, a, b, 13)
	ROUND1_STEP_BW(d, e, a, b, c, 12)
	ROUND1_STEP_BW(e, a, b, c, d, 11)
	ROUND1_STEP_BW(a, b, c, d, e, 10)
	ROUND1_STEP_BW(b, c, d, e, a, 9)
	ROUND1_STEP_BW(c, d, e, a, b, 8)
	ROUND1_STEP_BW(d, e, a, b, c, 7)
	ROUND1_STEP_BW(e, a, b, c, d, 6)
	ROUND1_STEP_BW(a, b, c, d, e, 5)
	ROUND1_STEP_BW(b, c, d, e, a, 4)
	ROUND1_STEP_BW(c, d, e, a, b, 3)
	ROUND1_STEP_BW(d, e, a, b, c, 2)
	ROUND1_STEP_BW(e, a, b, c, d, 1)
	ROUND1_STEP_BW(a, b, c, d, e, 0)

	hIn.save(a, b, c, d, e);
	a = s.a; b = s.b; c = s.c; d = s.d; e = s.e;

	/* Condition to go fowards: if (t <= step) */
  /* Earliest restart is T=58; skip.
	ROUND1_STEP(a, b, c, d, e, 0)
	ROUND1_STEP(e, a, b, c, d, 1)
	ROUND1_STEP(d, e, a, b, c, 2)
	ROUND1_STEP(c, d, e, a, b, 3)
	ROUND1_STEP(b, c, d, e, a, 4)
	ROUND1_STEP(a, b, c, d, e, 5)
	ROUND1_STEP(e, a, b, c, d, 6)
	ROUND1_STEP(d, e, a, b, c, 7)
	ROUND1_STEP(c, d, e, a, b, 8)
	ROUND1_STEP(b, c, d, e, a, 9)
	ROUND1_STEP(a, b, c, d, e, 10)
	ROUND1_STEP(e, a, b, c, d, 11)
	ROUND1_STEP(d, e, a, b, c, 12)
	ROUND1_STEP(c, d, e, a, b, 13)
	ROUND1_STEP(b, c, d, e, a, 14)
	ROUND1_STEP(a, b, c, d, e, 15)
	ROUND1_STEP(e, a, b, c, d, 16)
	ROUND1_STEP(d, e, a, b, c, 17)
	ROUND1_STEP(c, d, e, a, b, 18)
	ROUND1_STEP(b, c, d, e, a, 19)

	ROUND2_STEP(a, b, c, d, e, 20)
	ROUND2_STEP(e, a, b, c, d, 21)
	ROUND2_STEP(d, e, a, b, c, 22)
	ROUND2_STEP(c, d, e, a, b, 23)
	ROUND2_STEP(b, c, d, e, a, 24)
	ROUND2_STEP(a, b, c, d, e, 25)
	ROUND2_STEP(e, a, b, c, d, 26)
	ROUND2_STEP(d, e, a, b, c, 27)
	ROUND2_STEP(c, d, e, a, b, 28)
	ROUND2_STEP(b, c, d, e, a, 29)
	ROUND2_STEP(a, b, c, d, e, 30)
	ROUND2_STEP(e, a, b, c, d, 31)
	ROUND2_STEP(d, e, a, b, c, 32)
	ROUND2_STEP(c, d, e, a, b, 33)
	ROUND2_STEP(b, c, d, e, a, 34)
	ROUND2_STEP(a, b, c, d, e, 35)
	ROUND2_STEP(e, a, b, c, d, 36)
	ROUND2_STEP(d, e, a, b, c, 37)
	ROUND2_STEP(c, d, e, a, b, 38)
	ROUND2_STEP(b, c, d, e, a, 39)

	ROUND3_STEP(a, b, c, d, e, 40)
	ROUND3_STEP(e, a, b, c, d, 41)
	ROUND3_STEP(d, e, a, b, c, 42)
	ROUND3_STEP(c, d, e, a, b, 43)
	ROUND3_STEP(b, c, d, e, a, 44)
	ROUND3_STEP(a, b, c, d, e, 45)
	ROUND3_STEP(e, a, b, c, d, 46)
	ROUND3_STEP(d, e, a, b, c, 47)
	ROUND3_STEP(c, d, e, a, b, 48)
	ROUND3_STEP(b, c, d, e, a, 49)
	ROUND3_STEP(a, b, c, d, e, 50)
	ROUND3_STEP(e, a, b, c, d, 51)
	ROUND3_STEP(d, e, a, b, c, 52)
	ROUND3_STEP(c, d, e, a, b, 53)
	ROUND3_STEP(b, c, d, e, a, 54)
	ROUND3_STEP(a, b, c, d, e, 55)
	ROUND3_STEP(e, a, b, c, d, 56)
	ROUND3_STEP(d, e, a, b, c, 57)
  */
  if (t == 58) {
	ROUND3_STEP(c, d, e, a, b, 58)
	ROUND3_STEP(b, c, d, e, a, 59)

	ROUND4_STEP(a, b, c, d, e, 60)
	ROUND4_STEP(e, a, b, c, d, 61)
	ROUND4_STEP(d, e, a, b, c, 62)
	ROUND4_STEP(c, d, e, a, b, 63)
	ROUND4_STEP(b, c, d, e, a, 64)
  }
	ROUND4_STEP(a, b, c, d, e, 65)
	ROUND4_STEP(e, a, b, c, d, 66)
	ROUND4_STEP(d, e, a, b, c, 67)
	ROUND4_STEP(c, d, e, a, b, 68)
	ROUND4_STEP(b, c, d, e, a, 69)
	ROUND4_STEP(a, b, c, d, e, 70)
	ROUND4_STEP(e, a, b, c, d, 71)
	ROUND4_STEP(d, e, a, b, c, 72)
	ROUND4_STEP(c, d, e, a, b, 73)
	ROUND4_STEP(b, c, d, e, a, 74)
	ROUND4_STEP(a, b, c, d, e, 75)
	ROUND4_STEP(e, a, b, c, d, 76)
	ROUND4_STEP(d, e, a, b, c, 77)
	ROUND4_STEP(c, d, e, a, b, 78)
	ROUND4_STEP(b, c, d, e, a, 79)
