function _decryptBlock($in)
{
list($r0, $r1, $r2, $r3) = array_values(unpack('v*', $in));
$keys = $this->keys;
$limit = 44;
$actions = array($limit => 20, 20 => 0);
$j = 64;
for (;;) {
// R-mixing round.
$r3 = ($r3 | $r3 << 16) >> 5;
$r3 = $r3 - $keys[--$j] - (($r0 ^ $r1) & $r2 ^ $r0) & 0xffff;
$r2 = ($r2 | $r2 << 16) >> 3;
$r2 = $r2 - $keys[--$j] - (($r3 ^ $r0) & $r1 ^ $r3) & 0xffff;
$r1 = ($r1 | $r1 << 16) >> 2;
$r1 = $r1 - $keys[--$j] - (($r2 ^ $r3) & $r0 ^ $r2) & 0xffff;
$r0 = ($r0 | $r0 << 16) >> 1;
$r0 = $r0 - $keys[--$j] - (($r1 ^ $r2) & $r3 ^ $r1) & 0xffff;
if ($j === $limit) {
if ($limit === 0) {
break;
}
// R-mashing round.
$r3 = $r3 - $keys[$r2 & 0x3f] & 0xffff;
$r2 = $r2 - $keys[$r1 & 0x3f] & 0xffff;
$r1 = $r1 - $keys[$r0 & 0x3f] & 0xffff;
$r0 = $r0 - $keys[$r3 & 0x3f] & 0xffff;
$limit = $actions[$limit];
}
}
return pack('vvvv', $r0, $r1, $r2, $r3);
}