3v4l.org

run code in 150+ php & hhvm versions
Bugs & Features
<?php class EAHashor { private $right32; public function __construct() { $this->right32 = ~((~0 << 16) << 16); } public function eaEncode($string){ $a = "67452301"; $b = "EFCDAB89"; $c = "98BADCFE"; $d = "10325476"; $words = $this->init($string); for($i = 0, $l = count($words) / 16 - 1; $i <= $l; $i++){ $A = $a; $B = $b; $C = $c; $D = $d; /* ROUND 1 */ $this->FF ($A, $B, $C, $D, $words[0 + ($i * 16)], 7, "d76aa478"); $this->FF ($D, $A, $B, $C, $words[1 + ($i * 16)], 12, "e8c7b756"); $this->FF ($C, $D, $A, $B, $words[2 + ($i * 16)], 17, "242070db"); $this->FF ($B, $C, $D, $A, $words[3 + ($i * 16)], 22, "c1bdceee"); $this->FF ($A, $B, $C, $D, $words[4 + ($i * 16)], 7, "f57c0faf"); $this->FF ($D, $A, $B, $C, $words[5 + ($i * 16)], 12, "4787c62a"); $this->FF ($C, $D, $A, $B, $words[6 + ($i * 16)], 17, "a8304613"); $this->FF ($B, $C, $D, $A, $words[7 + ($i * 16)], 22, "fd469501"); $this->FF ($A, $B, $C, $D, $words[8 + ($i * 16)], 7, "698098d8"); $this->FF ($D, $A, $B, $C, $words[9 + ($i * 16)], 12, "8b44f7af"); $this->FF ($C, $D, $A, $B, $words[10 + ($i * 16)], 17, "ffff5bb1"); $this->FF ($B, $C, $D, $A, $words[11 + ($i * 16)], 22, "895cd7be"); $this->FF ($A, $B, $C, $D, $words[12 + ($i * 16)], 7, "6b901122"); $this->FF ($D, $A, $B, $C, $words[13 + ($i * 16)], 12, "fd987193"); $this->FF ($C, $D, $A, $B, $words[14 + ($i * 16)], 17, "a679438e"); $this->FF ($B, $C, $D, $A, $words[15 + ($i * 16)], 22, "49b40821"); /* ROUND 2 */ $this->GG ($A, $B, $C, $D, $words[1 + ($i * 16)], 5, "f61e2562"); $this->GG ($D, $A, $B, $C, $words[6 + ($i * 16)], 9, "c040b340"); $this->GG ($C, $D, $A, $B, $words[11 + ($i * 16)], 14, "265e5a51"); $this->GG ($B, $C, $D, $A, $words[0 + ($i * 16)], 20, "e9b6c7aa"); $this->GG ($A, $B, $C, $D, $words[5 + ($i * 16)], 5, "d62f105d"); $this->GG ($D, $A, $B, $C, $words[10 + ($i * 16)], 9, "02441453"); $this->GG ($C, $D, $A, $B, $words[15 + ($i * 16)], 14, "d8a1e681"); $this->GG ($B, $C, $D, $A, $words[4 + ($i * 16)], 20, "e7d3fbc8"); $this->GG ($A, $B, $C, $D, $words[9 + ($i * 16)], 5, "21e1cde6"); $this->GG ($D, $A, $B, $C, $words[14 + ($i * 16)], 9, "c33707d6"); $this->GG ($C, $D, $A, $B, $words[3 + ($i * 16)], 14, "f4d50d87"); $this->GG ($B, $C, $D, $A, $words[8 + ($i * 16)], 20, "455a14ed"); $this->GG ($A, $B, $C, $D, $words[13 + ($i * 16)], 5, "a9e3e905"); $this->GG ($D, $A, $B, $C, $words[2 + ($i * 16)], 9, "fcefa3f8"); $this->GG ($C, $D, $A, $B, $words[7 + ($i * 16)], 14, "676f02d9"); $this->GG ($B, $C, $D, $A, $words[12 + ($i * 16)], 20, "8d2a4c8a"); /* ROUND 3 */ $this->HH ($A, $B, $C, $D, $words[5 + ($i * 16)], 4, "fffa3942"); $this->HH ($D, $A, $B, $C, $words[8 + ($i * 16)], 11, "8771f681"); //HH ($C, $D, $A, $B, $words[11 + ($i * 16)], 16, "6d9d6122"); //the line below has been changed to use 14 rather than 16 as seen in the commented line $this->HH ($C, $D, $A, $B, $words[11 + ($i * 16)], 14, "6d9d6122"); $this->HH ($B, $C, $D, $A, $words[14 + ($i * 16)], 23, "fde5380c"); $this->HH ($A, $B, $C, $D, $words[1 + ($i * 16)], 4, "a4beea44"); $this->HH ($D, $A, $B, $C, $words[4 + ($i * 16)], 11, "4bdecfa9"); $this->HH ($C, $D, $A, $B, $words[7 + ($i * 16)], 16, "f6bb4b60"); $this->HH ($B, $C, $D, $A, $words[10 + ($i * 16)], 23, "bebfbc70"); $this->HH ($A, $B, $C, $D, $words[13 + ($i * 16)], 4, "289b7ec6"); $this->HH ($D, $A, $B, $C, $words[0 + ($i * 16)], 11, "eaa127fa"); $this->HH ($C, $D, $A, $B, $words[3 + ($i * 16)], 16, "d4ef3085"); $this->HH ($B, $C, $D, $A, $words[6 + ($i * 16)], 23, "04881d05"); $this->HH ($A, $B, $C, $D, $words[9 + ($i * 16)], 4, "d9d4d039"); $this->HH ($D, $A, $B, $C, $words[12 + ($i * 16)], 11, "e6db99e5"); $this->HH ($C, $D, $A, $B, $words[15 + ($i * 16)], 16, "1fa27cf8"); $this->HH ($B, $C, $D, $A, $words[2 + ($i * 16)], 23, "c4ac5665"); /* ROUND 4 */ $this->II ($A, $B, $C, $D, $words[0 + ($i * 16)], 6, "f4292244"); $this->II ($D, $A, $B, $C, $words[7 + ($i * 16)], 10, "432aff97"); $this->II ($C, $D, $A, $B, $words[14 + ($i * 16)], 15, "ab9423a7"); $this->II ($B, $C, $D, $A, $words[5 + ($i * 16)], 21, "fc93a039"); $this->II ($A, $B, $C, $D, $words[12 + ($i * 16)], 6, "655b59c3"); $this->II ($D, $A, $B, $C, $words[3 + ($i * 16)], 10, "8f0ccc92"); $this->II ($C, $D, $A, $B, $words[10 + ($i * 16)], 15, "ffeff47d"); $this->II ($B, $C, $D, $A, $words[1 + ($i * 16)], 21, "85845dd1"); $this->II ($A, $B, $C, $D, $words[8 + ($i * 16)], 6, "6fa87e4f"); $this->II ($D, $A, $B, $C, $words[15 + ($i * 16)], 10, "fe2ce6e0"); $this->II ($C, $D, $A, $B, $words[6 + ($i * 16)], 15, "a3014314"); $this->II ($B, $C, $D, $A, $words[13 + ($i * 16)], 21, "4e0811a1"); $this->II ($A, $B, $C, $D, $words[4 + ($i * 16)], 6, "f7537e82"); $this->II ($D, $A, $B, $C, $words[11 + ($i * 16)], 10, "bd3af235"); $this->II ($C, $D, $A, $B, $words[2 + ($i * 16)], 15, "2ad7d2bb"); $this->II ($B, $C, $D, $A, $words[9 + ($i * 16)], 21, "eb86d391"); //this last line is used twice $this->II ($B, $C, $D, $A, $words[9 + ($i * 16)], 21, "eb86d391"); $this->addVars($a, $b, $c, $d, $A, $B, $C, $D); } $MD5 = ''; foreach (array($a, $b, $c, $d) as $x) { $MD5 .= implode('', array_reverse(str_split($this->leftpad($x, 8), 2))); } return $MD5; } /* General functions */ private function hexbin($str){ $hexbinmap = array( "0" => "0000", "1" => "0001", "2" => "0010", "3" => "0011" , "4" => "0100" , "5" => "0101" , "6" => "0110" , "7" => "0111" , "8" => "1000" , "9" => "1001" , "A" => "1010" , "a" => "1010" , "B" => "1011" , "b" => "1011" , "C" => "1100" , "c" => "1100" , "D" => "1101" , "d" => "1101" , "E" => "1110" , "e" => "1110" , "F" => "1111" , "f" => "1111"); $bin = ""; for ($i = 0; $i < strlen($str); $i++){ $bin .= $hexbinmap[$str[$i]]; } $bin = ltrim($bin, '0'); // echo "Original: ".$str." New: ".$bin."<br />"; return $bin; } private function strhex($str){ $hex = ""; for ($i = 0; $i < strlen($str); $i++){ $hex = $hex.$this->leftpad(dechex(ord($str[$i])), 2); } return $hex; } /* MD5-specific functions */ private function init($string){ $len = strlen($string) * 8; $hex = $this->strhex($string); // convert ascii string to hex $bin = $this->leftpad($this->hexbin($hex), $len); // convert hex string to bin $padded = $this->pad($bin); $padded = $this->pad($padded, 1, $len); $block = str_split($padded, 32); foreach ($block as &$b) { $b = implode('', array_reverse(str_split($b, 8))); } return $block; } private function pad($bin, $type=0, $len = 0){ if($type == 0){ $bin = $bin."1"; $buff = strlen($bin) % 512; if($buff != 448){ while(strlen($bin) % 512 != 448){ $bin = $bin."0"; } } } // append length (b) of string to latter 64 bits elseif($type == 1){ $bLen = $this->leftpad(decbin($len), 64); $bin .= implode('', array_reverse(str_split($bLen, 8))); } return $bin; } /* MD5 base functions */ private function F($X, $Y, $Z){ $X = $this->binarySafeHexDec($X); $Y = $this->binarysafehexdec($Y); $Z = $this->binarysafehexdec($Z); $calc = (($X & $Y) | ((~ $X) & $Z)); // X AND Y OR NOT X AND Z return $calc; } private function G($X, $Y, $Z){ $X = $this->binarysafehexdec($X); $Y = $this->binarysafehexdec($Y); $Z = $this->binarysafehexdec($Z); $calc = (($X & $Z) | ($Y & (~ $Z))); // X AND Z OR Y AND NOT Z return $calc; } private function H($X, $Y, $Z){ $X = $this->binarysafehexdec($X); $Y = $this->binarysafehexdec($Y); $Z = $this->binarysafehexdec($Z); $calc = ($X ^ $Y ^ $Z); // X XOR Y XOR Z return $calc; } private function I($X, $Y, $Z){ $X = $this->binarysafehexdec($X); $Y = $this->binarysafehexdec($Y); $Z = $this->binarysafehexdec($Z); $calc = ($Y ^ ($X | (~ $Z))) ; // Y XOR (X OR NOT Z) return $calc; } /* MD5 round functions */ /* $A - hex, $B - hex, $C - hex, $D - hex (F - dec) $M - binary $s - decimal $t - hex */ private function FF(&$A, $B, $C, $D, $M, $s, $t){ $A = $this->binarysafehexdec($A); $t = $this->binarysafehexdec($t); $M = $this->binarysafebindec($M); $A = $this->add($A, $this->F($B, $C, $D), $M, $t) & $this->right32; //decimal $A = $this->rotate($A, $s); $A = dechex($this->add($this->binarysafehexdec($B), $this->binarysafehexdec($A)) & $this->right32); } private function GG(&$A, $B, $C, $D, $M, $s, $t){ $A = $this->binarysafehexdec($A); $t = $this->binarysafehexdec($t); $M = $this->binarysafebindec($M); $A = $this->add($A, $this->G($B, $C, $D), $M, $t) & $this->right32; //decimal $A = $this->rotate($A, $s); $A = dechex($this->add($this->binarysafehexdec($B), $this->binarysafehexdec($A)) & $this->right32); } private function HH(&$A, $B, $C, $D, $M, $s, $t){ $A = $this->binarysafehexdec($A); $t = $this->binarysafehexdec($t); $M = $this->binarysafebindec($M); $A = $this->add($A, $this->H($B, $C, $D), $M, $t) & $this->right32; //decimal $A = $this->rotate($A, $s); $A = dechex($this->add($this->binarysafehexdec($B), $this->binarysafehexdec($A)) & $this->right32); } private function II(&$A, $B, $C, $D, $M, $s, $t){ $A = $this->binarysafehexdec($A); $t = $this->binarysafehexdec($t); $M = $this->binarysafebindec($M); $A = $this->add($A, $this->I($B, $C, $D), $M, $t) & $this->right32; //decimal $A = $this->rotate($A, $s); $A = dechex($this->add($this->binarysafehexdec($B), $this->binarysafehexdec($A)) & $this->right32); } private function rotate ($decimal, $bits) { return dechex(($decimal << $bits) | (($decimal >> (32 - $bits)) & (~(~0 << $bits) & $this->right32))); } private function addVars(&$a, &$b, &$c, &$d, $A, $B, $C, $D){ $A = $this->binarysafehexdec($A); $B = $this->binarysafehexdec($B); $C = $this->binarysafehexdec($C); $D = $this->binarysafehexdec($D); $aa = $this->binarysafehexdec($a); $bb = $this->binarysafehexdec($b); $cc = $this->binarysafehexdec($c); $dd = $this->binarysafehexdec($d); $aa = $this->add($aa, $A) & $this->right32; $bb = $this->add($bb, $B) & $this->right32; $cc = $this->add($cc, $C) & $this->right32; $dd = $this->add($dd, $D) & $this->right32; $a = dechex($aa); $b = dechex($bb); $c = dechex($cc); $d = dechex($dd); } private function leftpad($needs_padding, $alignment) { if (strlen($needs_padding) % $alignment) { $pad_amount = $alignment - strlen($needs_padding) % $alignment; $left_pad = implode('', array_fill(0, $pad_amount, '0')); $needs_padding = $left_pad . $needs_padding; } return $needs_padding; } private function binarySafeBinDec($bin) { $bits = array_reverse(str_split($bin, 1)); $result = 0; foreach ($bits as $position => $bit) { $result |= ((int) $bit) << $position; } return $result; } private function binarySafeHexDec($hex) { $h = str_split(substr(str_pad($hex, 8, '0', STR_PAD_LEFT), -8), 2); return (hexdec($h[0]) << 24) | (hexdec($h[1]) << 16) | (hexdec($h[2]) << 8) | hexdec($h[3]); } private function leftShiftByOne($intAsStr) { $p = unpack('N2', $intAsStr); return pack('N2', ($p[1] << 1) | (($p[2] >> 31) & 0x00000001), $p[2] << 1); } private function binarySafeAddition($a, $b) { // NB: we don't actually need 64 bits, but 40 bit integers are confusing $a = "\x00\x00\x00\x00" . pack('N', $a); $b = "\x00\x00\x00\x00" . pack('N', $b); $carry = $a & $b; $result = $a ^ $b; while ($carry != "\x00\x00\x00\x00\x00\x00\x00\x00") { $shiftedcarry = $this->leftShiftByOne($carry); $carry = $result & $shiftedcarry; $result ^= $shiftedcarry; } return current(unpack('N', substr($result, 4))); } private function add() { $result = 0; foreach (func_get_args() as $i => $int) { $result = $this->binarySafeAddition($result, $int); echo "Add$i: $result\n"; } echo "\n"; return $result; } } $eahashor = new EAHashor(); $hash = $eahashor->eaEncode('test'); echo $hash;
Output for 5.3.0 - 5.6.28, hhvm-3.10.0 - 3.12.0, 7.0.0 - 7.1.0
Add0: 1732584193 Add1: 4294967295 Add2: 1953719667 Add3: 1272842731 Add0: 4023233417 Add1: 3738345774 Add0: 271733878 Add1: 3743109710 Add2: 3743109838 Add3: 3353545252 Add0: 3738345774 Add1: 259321260 Add0: 2562383102 Add1: 2274656299 Add2: 2274656299 Add3: 2880762118 Add0: 259321260 Add1: 4051846421 Add0: 4023233417 Add1: 4280193207 Add2: 4280193207 Add3: 3235667877 Add0: 4051846421 Add1: 3673324588 Add0: 3738345774 Add1: 3025757874 Add2: 3025757874 Add3: 2849338977 Add0: 3673324588 Add1: 3316493568 Add0: 259321260 Add1: 1530305 Add2: 1530305 Add3: 1201610731 Add0: 3316493568 Add1: 3081527673 Add0: 4051846421 Add1: 3212870169 Add2: 3212870169 Add3: 1739638828 Add0: 3081527673 Add1: 1208299738 Add0: 3673324588 Add1: 1621043588 Add2: 1621043588 Add3: 1575337605 Add0: 1208299738 Add1: 3915164233 Add0: 3316493568 Add1: 609357432 Add2: 609357432 Add3: 2379392848 Add0: 3915164233 Add1: 3534770831 Add0: 3081527673 Add1: 2143388626 Add2: 2143388626 Add3: 184974209 Add0: 3534770831 Add1: 979919679 Add0: 1208299738 Add1: 456784681 Add2: 456784681 Add3: 456742618 Add0: 979919679 Add1: 3894188465 Add0: 3915164233 Add1: 604302728 Add2: 604302728 Add3: 2908865862 Add0: 3894188465 Add1: 969404962 Add0: 3534770831 Add1: 4242334668 Add2: 4242334668 Add3: 1751971054 Add0: 969404962 Add1: 1883400534 Add0: 979919679 Add1: 4073149410 Add2: 4073149410 Add3: 4032808309 Add0: 1883400534 Add1: 1822017627 Add0: 3894188465 Add1: 1499665443 Add2: 1499665475 Add3: 4292630481 Add0: 1822017627 Add1: 473810963 Add0: 969404962 Add1: 2787367801 Add2: 2787367801 Add3: 4023903130 Add0: 473810963 Add1: 49921547 Add0: 1883400534 Add1: 2164257121 Add2: 2164257249 Add3: 1998460739 Add0: 49921547 Add1: 3871123065 Add0: 1822017627 Add1: 1939242612 Add2: 1939242612 Add3: 869740980 Add0: 3871123065 Add1: 2501906144 Add0: 473810963 Add1: 6411907 Add2: 6411907 Add3: 650129620 Add0: 2501906144 Add1: 2706708624 Add0: 49921547 Add1: 3020801691 Add2: 679554063 Add3: 305656761 Add0: 2706708624 Add1: 3706076175 Add0: 3871123065 Add1: 2603729545 Add2: 2603729545 Add3: 1902170854 Add0: 3706076175 Add1: 151034077 Add0: 2501906144 Add1: 4072819583 Add2: 4072819583 Add3: 4110835666 Add0: 151034077 Add1: 364920519 Add0: 2706708624 Add1: 3071661415 Add2: 3071661415 Add3: 2411183080 Add0: 364920519 Add1: 79323828 Add0: 3706076175 Add1: 4054213285 Add2: 4054213285 Add3: 3648675437 Add0: 79323828 Add1: 3952605785 Add0: 151034077 Add1: 180032334 Add2: 180032334 Add3: 748478772 Add0: 3952605785 Add1: 2134122718 Add0: 364920519 Add1: 83228580 Add2: 83228612 Add3: 3358392218 Add0: 2134122718 Add1: 3644020334 Add0: 79323828 Add1: 3790452098 Add2: 3790452098 Add3: 3603088137 Add0: 3644020334 Add1: 2314587166 Add0: 3952605785 Add1: 1959743639 Add2: 1959743639 Add3: 3123275140 Add0: 2314587166 Add1: 3795938996 Add0: 2134122718 Add1: 1073344274 Add2: 1073344274 Add3: 3923630103 Add0: 3795938996 Add1: 503083441 Add0: 3644020334 Add1: 1160231198 Add2: 1160231198 Add3: 1108827414 Add0: 503083441 Add1: 1287036469 Add0: 2314587166 Add1: 3887197011 Add2: 3887197011 Add3: 1327558188 Add0: 1287036469 Add1: 2286006781 Add0: 3795938996 Add1: 713305705 Add2: 713305705 Add3: 3081665267 Add0: 2286006781 Add1: 930950372 Add0: 503083441 Add1: 294024413 Add2: 294024413 Add3: 293645855 Add0: 930950372 Add1: 1334316757 Add0: 1287036469 Add1: 1030435329 Add2: 1030435329 Add3: 3302828162 Add0: 1334316757 Add1: 952902907 Add0: 2286006781 Add1: 3363485895 Add2: 3363485895 Add3: 907549161 Add0: 952902907 Add1: 1061581441 Add0: 930950372 Add1: 2139063699 Add2: 2139063731 Add3: 2103754175 Add0: 1061581441 Add1: 520430815 Add0: 1334316757 Add1: 1746370938 Add2: 1746371066 Add3: 215379006 Add0: 520430815 Add1: 3966494911 Add0: 952902907 Add1: 83157980 Add2: 83157980 Add3: 1356051333 Add0: 3966494911 Add1: 2315785029 Add0: 1061581441 Add1: 3098366374 Add2: 3098366374 Add3: 2942868742 Add0: 2315785029 Add1: 655278765 Add0: 520430815 Add1: 1618107958 Add2: 1618107958 Add3: 523377318 Add0: 655278765 Add1: 2048809914 Add0: 3966494911 Add1: 3280237329 Add2: 3280237329 Add3: 3961516503 Add0: 2048809914 Add1: 1008564536 Add0: 2315785029 Add1: 3944084340 Add2: 1602836712 Add3: 1244299490 Add0: 1008564536 Add1: 2418314121 Add0: 655278765 Add1: 4248202168 Add2: 4248202168 Add3: 3525680189 Add0: 2418314121 Add1: 744644014 Add0: 2048809914 Add1: 4202302169 Add2: 4202302169 Add3: 4278331358 Add0: 744644014 Add1: 467787457 Add0: 1008564536 Add1: 3821306398 Add2: 3821306398 Add3: 3180941911 Add0: 467787457 Add1: 4118217788 Add0: 2418314121 Add1: 1394152156 Add2: 1394152156 Add3: 972336321 Add0: 4118217788 Add1: 2598178315 Add0: 744644014 Add1: 2695770788 Add2: 2695770788 Add3: 3226513308 Add0: 2598178315 Add1: 1249496667 Add0: 467787457 Add1: 1102422829 Add2: 1102422829 Add3: 107084178 Add0: 1249496667 Add1: 326958935 Add0: 4118217788 Add1: 847132136 Add2: 2800851804 Add3: 2602220960 Add0: 326958935 Add1: 3660343165 Add0: 2598178315 Add1: 2276431541 Add2: 2276431541 Add3: 3403322956 Add0: 3660343165 Add1: 1149606568 Add0: 1249496667 Add1: 2166737968 Add2: 2166738000 Add3: 750383095 Add0: 1149606568 Add1: 1015099652 Add0: 326958935 Add1: 2362647173 Add2: 2362647173 Add3: 2305213118 Add0: 1015099652 Add1: 2488425948 Add0: 3660343165 Add1: 1579660376 Add2: 1579660376 Add3: 3280145947 Add0: 2488425948 Add1: 1964369100 Add0: 1149606568 Add1: 2813545931 Add2: 2813545931 Add3: 918559325 Add0: 1964369100 Add1: 1971280295 Add0: 1015099652 Add1: 1198215279 Add2: 1198215279 Add3: 1197163756 Add0: 1971280295 Add1: 401964372 Add0: 2488425948 Add1: 2127725740 Add2: 2127725868 Add3: 72803069 Add0: 401964372 Add1: 2006321200 Add0: 1964369100 Add1: 1568258040 Add2: 1568258040 Add3: 3441571399 Add0: 2006321200 Add1: 3223558691 Add0: 1971280295 Add1: 356314178 Add2: 356314178 Add3: 325702434 Add0: 3223558691 Add1: 1735402096 Add0: 401964372 Add1: 1196419888 Add2: 1196419888 Add3: 3931188804 Add0: 1735402096 Add1: 4271019928 Add0: 2006321200 Add1: 272948700 Add2: 272948700 Add3: 1582100349 Add0: 4271019928 Add1: 3997065525 Add0: 3223558691 Add1: 3226534986 Add2: 3226534986 Add3: 3081011916 Add0: 3997065525 Add1: 3613332578 Add0: 1735402096 Add1: 2695970754 Add2: 2695970754 Add3: 1575760375 Add0: 3613332578 Add1: 2284253657 Add0: 4271019928 Add1: 1296794449 Add2: 1296794449 Add3: 2015581708 Add0: 2284253657 Add1: 858598890 Add0: 3997065525 Add1: 2714337115 Add2: 2714337115 Add3: 2370851564 Add0: 858598890 Add1: 2428426228 Add0: 2428426228 Add1: 1145697818 Add2: 1145697818 Add3: 802212267 Add0: 858598890 Add1: 1754474499 Add0: 1732584193 Add1: 1050949475 Add0: 4023233417 Add1: 1482740620 Add0: 2562383102 Add1: 3420981992 Add0: 271733878 Add1: 2555987535 6337a43e8cd36058e80ae8cb4f465998