docs: public static byte[] decode(final byte[] input) {
  		final int lenInput = findEnd(input);
  		final int lenOutput = (lenInput * BITS_PER_B64_BYTE / 8);
  		final byte[] output = new byte[lenOutput];
  		final byte[] transTable = DECODE_TABLE;
  		for (int i = 0, j = 0; i < lenInput; i += BYTES_PER_BLOCK_OF_6_BITS) {
  			final int b1 = transTable[getByte(input, i)];
  			final int b2 = transTable[getByte(input, i + 1)];
  			final int b3 = transTable[getByte(input, i + 2)];
  			final int b4 = transTable[getByte(input, i + 3)];
  			final long block = ((b1 << 18) | (b2 << 12) | (b3 << 6) | b4) & 0x00FFFFFF;
  			final byte x1 = (byte) ((block >> 16) & 0xFF);
  			final byte x2 = (byte) ((block >> 8) & 0xFF);
  			final byte x3 = (byte) (block & 0xFF);
  			setByte(output, j++, lenOutput, x1);
  			setByte(output, j++, lenOutput, x2);
  			setByte(output, j++, lenOutput, x3);
  		}
  		return output;
  	}