Thank you for your answer
Result.a[1] := (DecodeTable[InBuf[1]] shl 4) or (DecodeTable[InBuf[2]] shr 2);
This line assigned an overflow value into a byte, counting on the fact that Result.a[0] is available. if range checking is off, this works but with range checking off, the resulting value is too large to be assigned to a byte.
Why no use the Delphi routines for such a simple thing as base64 encoding/decoding?