3v4l.org

run code in 300+ PHP versions simultaneously
<?php if (!class_exists('nanoSha2')) { class nanoSha2 { // php 4 - 5 compatable class properties var $toUpper; var $platform; // Php 4 - 6 compatable constructor function nanoSha2($toUpper = false) { // Determine if the caller wants upper case or not. $this->toUpper = is_bool($toUpper) ? $toUpper : ((defined('_NANO_SHA2_UPPER')) ? true : false); // Deteremine if the system is 32 or 64 bit. $tmpInt = (int)4294967295; $this->platform = ($tmpInt > 0) ? 64 : 32; } // Do the SHA-256 Padding routine (make input a multiple of 512 bits) function char_pad($str) { $tmpStr = $str; $l = strlen($tmpStr)*8; // # of bits from input string $tmpStr .= "\x80"; // append the "1" bit followed by 7 0's $k = (512 - (($l + 8 + 64) % 512)) / 8; // # of 0 bytes to append $k += 4; // PHP Strings will never exceed (2^31)-1, 1st 32bits of // the 64-bit value representing $l can be all 0's for ($x = 0; $x < $k; $x++) { $tmpStr .= "\0"; } // append the 32-bits representing # of bits from input string ($l) $tmpStr .= chr((($l>>24) & 0xFF)); $tmpStr .= chr((($l>>16) & 0xFF)); $tmpStr .= chr((($l>>8) & 0xFF)); $tmpStr .= chr(($l & 0xFF)); return $tmpStr; } // Here are the bitwise and functions as defined in FIPS180-2 Standard function addmod2n($x, $y, $n = 4294967296) // Z = (X + Y) mod 2^32 { $mask = 0x80000000; if ($x < 0) { $x &= 0x7FFFFFFF; $x = (float)$x + $mask; } if ($y < 0) { $y &= 0x7FFFFFFF; $y = (float)$y + $mask; } $r = $x + $y; if ($r >= $n) { while ($r >= $n) { $r -= $n; } } return (int)$r; } // Logical bitwise right shift (PHP default is arithmetic shift) function SHR($x, $n) // x >> n { if ($n >= 32) { // impose some limits to keep it 32-bit return (int)0; } if ($n <= 0) { return (int)$x; } $mask = 0x40000000; if ($x < 0) { $x &= 0x7FFFFFFF; $mask = $mask >> ($n-1); return ($x >> $n) | $mask; } return (int)$x >> (int)$n; } function ROTR($x, $n) { return (int)(($this->SHR($x, $n) | ($x << (32-$n)) & 0xFFFFFFFF)); } function Ch($x, $y, $z) { return ($x & $y) ^ ((~$x) & $z); } function Maj($x, $y, $z) { return ($x & $y) ^ ($x & $z) ^ ($y & $z); } function Sigma0($x) { return (int) ($this->ROTR($x, 2)^$this->ROTR($x, 13)^$this->ROTR($x, 22)); } function Sigma1($x) { return (int) ($this->ROTR($x, 6)^$this->ROTR($x, 11)^$this->ROTR($x, 25)); } function sigma_0($x) { return (int) ($this->ROTR($x, 7)^$this->ROTR($x, 18)^$this->SHR($x, 3)); } function sigma_1($x) { return (int) ($this->ROTR($x, 17)^$this->ROTR($x, 19)^$this->SHR($x, 10)); } /* * Custom functions to provide PHP support */ // split a byte-string into integer array values function int_split($input) { $l = strlen($input); if ($l <= 0) { return (int)0; } if (($l % 4) != 0) { // invalid input return false; } for ($i = 0; $i < $l; $i += 4) { $int_build = (ord($input[$i]) << 24); $int_build += (ord($input[$i+1]) << 16); $int_build += (ord($input[$i+2]) << 8); $int_build += (ord($input[$i+3])); $result[] = $int_build; } return $result; } /** * Process and return the hash. * * @param $str Input string to hash * @param $ig_func Option param to ignore checking for php > 5.1.2 * @return string Hexadecimal representation of the message digest */ function hash($str, $ig_func = false) { unset($binStr); // binary representation of input string unset($hexStr); // 256-bit message digest in readable hex format // check for php's internal sha256 function, ignore if ig_func==true if ($ig_func == false) { if (version_compare(PHP_VERSION,'5.1.2','>=')) { return hash("sha256", $str, false); } else if (function_exists('mhash') && defined('MHASH_SHA256')) { return base64_encode(bin2hex(mhash(MHASH_SHA256, $str))); } } /* * SHA-256 Constants * Sequence of sixty-four constant 32-bit words representing the * first thirty-two bits of the fractional parts of the cube roots * of the first sixtyfour prime numbers. */ $K = array((int)0x428a2f98, (int)0x71374491, (int)0xb5c0fbcf, (int)0xe9b5dba5, (int)0x3956c25b, (int)0x59f111f1, (int)0x923f82a4, (int)0xab1c5ed5, (int)0xd807aa98, (int)0x12835b01, (int)0x243185be, (int)0x550c7dc3, (int)0x72be5d74, (int)0x80deb1fe, (int)0x9bdc06a7, (int)0xc19bf174, (int)0xe49b69c1, (int)0xefbe4786, (int)0x0fc19dc6, (int)0x240ca1cc, (int)0x2de92c6f, (int)0x4a7484aa, (int)0x5cb0a9dc, (int)0x76f988da, (int)0x983e5152, (int)0xa831c66d, (int)0xb00327c8, (int)0xbf597fc7, (int)0xc6e00bf3, (int)0xd5a79147, (int)0x06ca6351, (int)0x14292967, (int)0x27b70a85, (int)0x2e1b2138, (int)0x4d2c6dfc, (int)0x53380d13, (int)0x650a7354, (int)0x766a0abb, (int)0x81c2c92e, (int)0x92722c85, (int)0xa2bfe8a1, (int)0xa81a664b, (int)0xc24b8b70, (int)0xc76c51a3, (int)0xd192e819, (int)0xd6990624, (int)0xf40e3585, (int)0x106aa070, (int)0x19a4c116, (int)0x1e376c08, (int)0x2748774c, (int)0x34b0bcb5, (int)0x391c0cb3, (int)0x4ed8aa4a, (int)0x5b9cca4f, (int)0x682e6ff3, (int)0x748f82ee, (int)0x78a5636f, (int)0x84c87814, (int)0x8cc70208, (int)0x90befffa, (int)0xa4506ceb, (int)0xbef9a3f7, (int)0xc67178f2); // Pre-processing: Padding the string $binStr = $this->char_pad($str); // Parsing the Padded Message (Break into N 512-bit blocks) $M = str_split($binStr, 64); // Set the initial hash values $h[0] = (int)0x6a09e667; $h[1] = (int)0xbb67ae85; $h[2] = (int)0x3c6ef372; $h[3] = (int)0xa54ff53a; $h[4] = (int)0x510e527f; $h[5] = (int)0x9b05688c; $h[6] = (int)0x1f83d9ab; $h[7] = (int)0x5be0cd19; // loop through message blocks and compute hash. ( For i=1 to N : ) $N = count($M); for ($i = 0; $i < $N; $i++) { // Break input block into 16 32bit words (message schedule prep) $MI = $this->int_split($M[$i]); // Initialize working variables $_a = (int)$h[0]; $_b = (int)$h[1]; $_c = (int)$h[2]; $_d = (int)$h[3]; $_e = (int)$h[4]; $_f = (int)$h[5]; $_g = (int)$h[6]; $_h = (int)$h[7]; unset($_s0); unset($_s1); unset($_T1); unset($_T2); $W = array(); // Compute the hash and update for ($t = 0; $t < 16; $t++) { // Prepare the first 16 message schedule values as we loop $W[$t] = $MI[$t]; // Compute hash $_T1 = $this->addmod2n($this->addmod2n($this->addmod2n($this->addmod2n($_h, $this->Sigma1($_e)), $this->Ch($_e, $_f, $_g)), $K[$t]), $W[$t]); $_T2 = $this->addmod2n($this->Sigma0($_a), $this->Maj($_a, $_b, $_c)); // Update working variables $_h = $_g; $_g = $_f; $_f = $_e; $_e = $this->addmod2n($_d, $_T1); $_d = $_c; $_c = $_b; $_b = $_a; $_a = $this->addmod2n($_T1, $_T2); } for (; $t < 64; $t++) { // Continue building the message schedule as we loop $_s0 = $W[($t+1)&0x0F]; $_s0 = $this->sigma_0($_s0); $_s1 = $W[($t+14)&0x0F]; $_s1 = $this->sigma_1($_s1); $W[$t&0xF] = $this->addmod2n($this->addmod2n($this->addmod2n($W[$t&0xF], $_s0), $_s1), $W[($t+9)&0x0F]); // Compute hash $_T1 = $this->addmod2n($this->addmod2n($this->addmod2n($this->addmod2n($_h, $this->Sigma1($_e)), $this->Ch($_e, $_f, $_g)), $K[$t]), $W[$t&0xF]); $_T2 = $this->addmod2n($this->Sigma0($_a), $this->Maj($_a, $_b, $_c)); // Update working variables $_h = $_g; $_g = $_f; $_f = $_e; $_e = $this->addmod2n($_d, $_T1); $_d = $_c; $_c = $_b; $_b = $_a; $_a = $this->addmod2n($_T1, $_T2); } $h[0] = $this->addmod2n($h[0], $_a); $h[1] = $this->addmod2n($h[1], $_b); $h[2] = $this->addmod2n($h[2], $_c); $h[3] = $this->addmod2n($h[3], $_d); $h[4] = $this->addmod2n($h[4], $_e); $h[5] = $this->addmod2n($h[5], $_f); $h[6] = $this->addmod2n($h[6], $_g); $h[7] = $this->addmod2n($h[7], $_h); } // Convert the 32-bit words into human readable hexadecimal format. $hexStr = sprintf("%08x%08x%08x%08x%08x%08x%08x%08x", $h[0], $h[1], $h[2], $h[3], $h[4], $h[5], $h[6], $h[7]); return ($this->toUpper) ? strtoupper($hexStr) : $hexStr; } } } if (!function_exists('str_split')) { /** * Splits a string into an array of strings with specified length. * Compatability with older verions of PHP */ function str_split($string, $split_length = 1) { $sign = ($split_length < 0) ? -1 : 1; $strlen = strlen($string); $split_length = abs($split_length); if (($split_length == 0) || ($strlen == 0)) { $result = false; } elseif ($split_length >= $strlen) { $result[] = $string; } else { $length = $split_length; for ($i = 0; $i < $strlen; $i++) { $i = (($sign < 0) ? $i + $length : $i); $result[] = substr($string, $sign*$i, $length); $i--; $i = (($sign < 0) ? $i : $i + $length); $length = (($i + $split_length) > $strlen) ? ($strlen - ($i + 1)) : $split_length; } } return $result; } } /** * Main routine called from an application using this include. * * General usage: * require_once('sha256.inc.php'); * $hashstr = sha256('abc'); * * Note: * PHP Strings are limitd to (2^31)-1, so it is not worth it to * check for input strings > 2^64 as the FIPS180-2 defines. */ // 2009-07-23: Added check for function as the Suhosin plugin adds this routine. if (!function_exists('sha256')) { function sha256($str, $ig_func = false) { $obj = new nanoSha2((defined('_NANO_SHA2_UPPER')) ? true : false); return $obj->hash($str, $ig_func); } } else { function _nano_sha256($str, $ig_func = false) { $obj = new nanoSha2((defined('_NANO_SHA2_UPPER')) ? true : false); return $obj->hash($str, $ig_func); } } // support to give php4 the hash() routine which abstracts this code. if (!function_exists('hash')) { function hash($algo, $data) { if (empty($algo) || !is_string($algo) || !is_string($data)) { return false; } if (function_exists($algo)) { return $algo($data); } } } //require_once (dirname(__FILE__) . "/sha256.php"); $AWS_ACCESS_KEY = 'AKIAIDMODWRW3CRDO2BA'; $AWS_PRIVATE_KEY = 'kMuJRvcejqzMvmoZWsURIDKkteVTXa3ReDXQ6RqE'; $AWS_REGION = 'us-west-2'; $TOPIC_ARN_UPDATECUS = 'arn:aws:sns:us-west-2:791920038536:updateCusNumberRequest'; $endpoints = array( 'US-EAST-1' => 'sns.us-east-1.amazonaws.com', 'US-WEST-1' => 'sns.us-west-1.amazonaws.com', 'US-WEST-2' => 'sns.us-west-2.amazonaws.com', 'EU-WEST-1' => 'sns.eu-west-1.amazonaws.com', 'AP-SE-1' => 'sns.ap-southeast-1.amazonaws.com', 'AP-NE-1' => 'sns.ap-northeast-1.amazonaws.com', 'SA-EAST-1' => 'sns.sa-east-1.amazonaws.com' ); $endpoint = $endpoints[strtoupper($AWS_REGION)]; $protocol = 'https://'; $email = ''; $cus_id = ''; $message = array( 'topic' => 'updateCusNumberRequest', 'email' => $email, 'cus_id' => $cus_id ); $params = array( 'TopicArn' => $TOPIC_ARN_UPDATECUS, 'Message' => php_compat_json_encode($message) ); $params['Action'] = 'Publish'; $params['AWSAccessKeyId'] = $AWS_ACCESS_KEY; $params['Timestamp'] = gmdate('Y-m-d\TH:i:s\Z'); $params['SignatureVersion'] = 2; $params['SignatureMethod'] = 'HmacSHA256'; uksort($params, 'strnatcmp'); $queryString = ''; foreach ($params as $key => $val) { $queryString .= "&{$key}=".rawurlencode($val); } $queryString = substr($queryString, 1); $requestString = "GET\n" . $endpoint."\n" . "/\n" . $queryString; $params['Signature'] = base64_encode( php_compat_hash_hmac('sha256', $requestString, $AWS_PRIVATE_KEY, true) ); $request = $protocol . $endpoint . '/?' . php_compat_http_build_query($params); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $request); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $output = curl_exec($ch); var_dump($output); /* php4 compatible functions */ //http://bit.ly/1qd0Usl function php_compat_hash_hmac($algo, $data, $key, $raw_output = false) { // Block size (byte) for MD5, SHA-1 and SHA-256. $blocksize = 64; $ipad = str_repeat("\x36", $blocksize); $opad = str_repeat("\x5c", $blocksize); if (strlen($key) > $blocksize) { $key = php_compat_hash($algo, $key, true); } else { $key = str_pad($key, $blocksize, "\x00"); } $ipad ^= $key; $opad ^= $key; return php_compat_hash($algo, $opad . php_compat_hash($algo, $ipad . $data, true), $raw_output); } //http://bit.ly/1nIYD2h function php_compat_hash($algo, $data, $raw_output = false) { $hash = sha256($data); if ($raw_output) { return pack('H*', $hash); } else { echo "returnhash"; return $hash; } } //http://bit.ly/1uH6OR0 function php_compat_json_encode($a=false) { if (is_null($a)) return 'null'; if ($a === false) return 'false'; if ($a === true) return 'true'; if (is_scalar($a)) { if (is_float($a)) { // Always use "." for floats. return floatval(str_replace(",", ".", strval($a))); } if (is_string($a)) { $jsonReplaces = array(array("\\", "/", "\n", "\t", "\r", "\b", "\f", '"'), array('\\\\', '\\/', '\\n', '\\t', '\\r', '\\b', '\\f', '\"')); return '"' . str_replace($jsonReplaces[0], $jsonReplaces[1], $a) . '"'; } else return $a; } $isList = true; for ($i = 0, reset($a); $i < count($a); $i++, next($a)) { if (key($a) !== $i) { $isList = false; break; } } $result = array(); if ($isList) { foreach ($a as $v) $result[] = php_compat_json_encode($v); return '[' . join(',', $result) . ']'; } else { foreach ($a as $k => $v) $result[] = php_compat_json_encode($k).':'.php_compat_json_encode($v); return '{' . join(',', $result) . '}'; } } //http://bit.ly/1q8GwII function php_compat_http_build_query($data, $prefix = null, $sep = '', $key = '') { $ret = array(); foreach ((array )$data as $k => $v) { $k = urlencode($k); if (is_int($k) && $prefix != null) { $k = $prefix . $k; } if (!empty($key)) { $k = $key . "[" . $k . "]"; } if (is_array($v) || is_object($v)) { array_push($ret, http_build_query($v, "", $sep, $k)); } else { array_push($ret, $k . "=" . urlencode($v)); } } if (empty($sep)) { $sep = ini_get("arg_separator.output"); } return implode($sep, $ret); } ?>

Here you find the average performance (time & memory) of each version. A grayed out version indicates it didn't complete successfully (based on exit-code).

VersionSystem time (s)User time (s)Memory (MiB)
8.3.40.0100.01019.13
8.3.30.0090.01219.29
8.3.20.0080.00020.41
8.3.10.0080.00023.65
8.3.00.0030.00619.63
8.2.170.0090.00622.96
8.2.160.0110.00420.63
8.2.150.0050.00324.18
8.2.140.0040.00424.66
8.2.130.0110.00426.16
8.2.120.0030.00520.96
8.2.110.0100.00022.07
8.2.100.0060.00618.16
8.2.90.0100.00019.46
8.2.80.0040.00418.00
8.2.70.0000.00918.00
8.2.60.0060.00318.30
8.2.50.0030.00618.07
8.2.40.0000.00818.59
8.2.30.0040.00418.41
8.2.20.0060.00317.92
8.2.10.0040.00418.38
8.2.00.0040.00418.08
8.1.270.0080.00023.97
8.1.260.0040.00426.35
8.1.250.0050.00328.09
8.1.240.0000.01023.87
8.1.230.0090.00619.08
8.1.220.0060.00317.78
8.1.210.0030.00618.77
8.1.200.0030.00617.60
8.1.190.0050.00517.38
8.1.180.0060.00318.10
8.1.170.0030.00518.79
8.1.160.0030.00522.22
8.1.150.0030.00519.11
8.1.140.0030.00517.80
8.1.130.0050.00218.11
8.1.120.0000.00817.80
8.1.110.0030.00617.76
8.1.100.0000.00917.71
8.1.90.0040.00417.71
8.1.80.0040.00417.73
8.1.70.0040.00417.69
8.1.60.0060.00317.80
8.1.50.0060.00317.68
8.1.40.0060.00317.72
8.1.30.0000.00917.76
8.1.20.0030.00617.82
8.1.10.0060.00317.72
8.1.00.0050.00317.76
8.0.300.0050.00518.77
8.0.290.0000.00817.13
8.0.280.0060.00318.72
8.0.270.0030.00617.36
8.0.260.0000.00717.55
8.0.250.0070.00017.19
8.0.240.0050.00317.34
8.0.230.0040.00417.20
8.0.220.0070.00017.25
8.0.210.0040.00417.11
8.0.200.0040.00417.23
8.0.190.0030.00617.12
8.0.180.0080.00017.10
8.0.170.0030.00617.11
8.0.160.0050.00317.26
8.0.150.0040.00417.02
8.0.140.0040.00417.10
8.0.130.0060.00313.61
8.0.120.0030.00617.19
8.0.110.0000.00817.23
8.0.100.0040.00417.18
8.0.90.0000.00817.26
8.0.80.0100.00717.24
8.0.70.0080.00017.27
8.0.60.0030.00617.00
8.0.50.0040.00417.05
8.0.30.0120.01217.44
8.0.20.0150.00517.50
8.0.10.0040.00417.29
8.0.00.0100.01117.13
7.4.330.0060.00015.00
7.4.320.0000.00716.79
7.4.300.0070.00016.71
7.4.290.0040.00416.87
7.4.280.0050.00316.72
7.4.270.0000.00716.78
7.4.260.0040.00416.84
7.4.250.0000.00916.84
7.4.240.0040.00416.84
7.4.230.0050.00316.67
7.4.220.0170.01016.77
7.4.210.0090.00916.91
7.4.200.0040.00416.63
7.4.160.0060.01116.87
7.4.150.0190.00317.40
7.4.140.0100.01017.86
7.4.130.0100.01216.75
7.4.120.0110.00816.87
7.4.110.0100.01016.89
7.4.100.0060.01216.73
7.4.90.0100.01016.77
7.4.80.0120.00619.39
7.4.70.0090.01016.79
7.4.60.0000.01716.88
7.4.50.0040.00416.56
7.4.40.0110.01116.70
7.4.30.0030.01317.02
7.4.00.0120.00615.26
7.3.330.0000.00813.60
7.3.320.0030.00313.57
7.3.310.0040.00416.54
7.3.300.0070.00016.53
7.3.290.0090.00616.63
7.3.280.0070.01116.62
7.3.270.0170.01017.40
7.3.260.0110.00816.55
7.3.250.0030.01516.64
7.3.240.0040.01516.77
7.3.230.0160.00316.61
7.3.210.0140.00416.86
7.3.200.0170.00019.39
7.3.190.0090.00916.56
7.3.180.0030.01516.78
7.3.170.0070.01016.84
7.3.160.0080.00816.62
7.2.330.0090.00916.87
7.2.320.0140.00416.70
7.2.310.0030.01617.06
7.2.300.0000.02317.09
7.2.290.0100.00817.06
7.2.60.0000.01417.11
7.2.00.0090.00619.39
7.1.200.0070.01015.92
7.1.100.0080.00318.18
7.1.70.0040.00716.98
7.1.60.0060.01619.40
7.1.50.0070.01017.08
7.1.00.0000.08022.37
7.0.200.0040.00816.46
7.0.140.0070.07022.16
7.0.100.0070.08720.20
7.0.90.0070.06720.22
7.0.80.0030.08320.25
7.0.70.0030.07720.09
7.0.60.0000.09020.13
7.0.50.0400.08020.43
7.0.40.0070.08720.07
7.0.30.0000.09720.07
7.0.20.0070.09020.07
7.0.10.0070.08320.08
7.0.00.0100.08720.06
5.6.280.0100.06721.29
5.6.250.0170.07720.83
5.6.240.0030.08320.65
5.6.230.0130.07320.64
5.6.220.0100.08020.63
5.6.210.0070.06320.61
5.6.200.0070.08021.15
5.6.190.0100.07721.20
5.6.180.0070.08021.20
5.6.170.0070.07321.15
5.6.160.0100.08721.27
5.6.150.0130.07321.13
5.6.140.0200.07321.22
5.6.130.0100.07021.22
5.6.120.0170.07321.25
5.6.110.0130.07321.12
5.6.100.0000.04021.16
5.6.90.0030.05021.11
5.6.80.0030.04020.55
5.6.70.0000.04320.45
5.6.60.0070.03720.42
5.6.50.0100.05720.57
5.6.40.0170.07020.52
5.6.30.0030.06720.59
5.6.20.0030.04020.43
5.6.10.0070.04720.50
5.6.00.0000.04320.55
5.5.380.0070.08320.53
5.5.370.0170.07320.49
5.5.360.0030.05320.47
5.5.350.0070.08320.46
5.5.340.0100.06320.94
5.5.330.0170.04720.97
5.5.320.0030.08021.05
5.5.310.0070.08321.05
5.5.300.0130.08020.89
5.5.290.0130.07720.90
5.5.280.0130.07320.89
5.5.270.0070.04720.92
5.5.260.0100.04321.05
5.5.250.0030.03720.68
5.5.240.0130.05720.28
5.5.230.0100.04320.43
5.5.220.0030.04020.44
5.5.210.0070.03720.38
5.5.200.0130.06020.23
5.5.190.0000.08020.40
5.5.180.0070.03320.41
5.5.160.0100.03020.36
5.5.150.0000.06320.28
5.5.140.0000.05320.34
5.5.130.0030.04020.37
5.5.120.0100.04720.41
5.5.110.0100.03720.12
5.5.100.0070.03720.21
5.5.90.0070.03020.23
5.5.80.0130.03020.20
5.5.70.0030.04720.23
5.5.60.0100.03020.22
5.5.50.0000.03720.16
5.5.40.0070.08020.25
5.5.30.0100.06020.06
5.5.20.0000.04320.27
5.5.10.0000.04320.21
5.5.00.0030.05020.09
5.4.450.0030.06719.58
5.4.440.0070.07719.51
5.4.430.0070.07319.57
5.4.420.0030.04719.46
5.4.410.0030.04319.33
5.4.400.0070.03319.11
5.4.390.0070.03319.10
5.4.380.0000.04018.92
5.4.370.0030.04019.24
5.4.360.0070.07319.20
5.4.350.0100.07319.08
5.4.340.0030.07319.23
5.4.320.0000.04319.14
5.4.310.0170.06319.01
5.4.300.0000.04019.17
5.4.290.0070.06319.18
5.4.280.0000.05319.11
5.4.270.0030.04019.09
5.4.260.0030.06319.15
5.4.250.0000.04319.23
5.4.240.0000.04019.16
5.4.230.0030.03719.14
5.4.220.0100.06719.16
5.4.210.0070.05719.13
5.4.200.0030.03319.07
5.4.190.0070.04719.13
5.4.180.0000.04019.23
5.4.170.0030.04019.00
5.4.160.0000.04019.09
5.4.150.0130.02719.09
5.4.140.0030.04016.50
5.4.130.0030.04716.50
5.4.120.0000.04016.49
5.4.110.0070.07316.44
5.4.100.0000.05316.49
5.4.90.0030.03716.61
5.4.80.0000.03716.47
5.4.70.0030.04016.43
5.4.60.0000.03716.42
5.4.50.0070.03016.52
5.4.40.0100.02716.54
5.4.30.0030.03716.52
5.4.20.0030.06316.43
5.4.10.0000.05316.46
5.4.00.0070.04015.75

preferences:
36.49 ms | 400 KiB | 5 Q