<?php
function str_format($s) {
	return is_string($s) ? "'$s'" : ($s === false ? "(false)" : "(".gettype($s)." ???)");
}
function line($a, $b, $c) {
	#if ($c !== false && ($b !== $c || strpos($a, "*") !== false || strpos($a, "\0") !== false))
	printf("%-8s \t %-8s \t %-8s\n", str_format($a), str_format($b), str_format($c));
}

line("base64", "default", "strict");
foreach (["V", "V=", "VV=", "VV==", "V=====", "=VVV=", "VV=V=", "VVV==", "V=VV=", "V V==", "VV ==", "VV== ", "VV= =", "VVV=V", "VVVV=*"] as $v) {
	line($v, base64_decode($v), base64_decode($v, true));
}

$t = "V=*\0";
for ($i = 0; $i < (1<<16); ++$i) {
	$v = ltrim($t[($i>>14)&3].$t[($i>>12)&3].$t[($i>>10)&3].$t[($i>>8)&3].$t[($i>>6)&3].$t[($i>>4)&3].$t[($i>>2)&3].$t[($i>>0)&3], "\0");
	line($v, base64_decode($v), base64_decode($v, true));
}
