public static ExecutionArrayList<Byte> hexToBytes(ExecutionContext ctx, String value) {
        String hex = prepareNumberString(value, true);
        if (hex == null) {
            throw new IllegalArgumentException("Hex string must be not empty!");
        }
        int len = hex.length();
        if (len % 2 > 0) {
            throw new IllegalArgumentException("Hex string must be even-length.");
        }
        int radix = isHexadecimal(value);
        if (radix != HEX_RADIX) {
            throw new NumberFormatException("Value: \"" + value + "\" is not numeric or hexDecimal format!");
        }

        byte [] data = hexToBytes(hex);
        return bytesToExecutionArrayList(ctx, data);
    }
@Test
    public void hexToBytes_Test() {
        String input = "0x01752B0367FA000500010488FFFFFFFFFFFFFFFF33";
        byte[] expected = {1, 117, 43, 3, 103, -6, 0, 5, 0, 1, 4, -120, -1, -1, -1, -1, -1, -1, -1, -1, 51};
        List<Byte> actual = TbUtils.hexToBytes(ctx, input);
        Assertions.assertEquals(toList(expected), actual);
        try {
            input = "0x01752B0367FA000500010488FFFFFFFFFFFFFFFF3";
            TbUtils.hexToBytes(ctx, input);
        } catch (IllegalArgumentException e) {
            Assertions.assertTrue(e.getMessage().contains("Hex string must be even-length."));
        }
        try {
            input = "0x01752B0367KA000500010488FFFFFFFFFFFFFFFF33";
            TbUtils.hexToBytes(ctx, input);
        } catch (NumberFormatException e) {
            Assertions.assertTrue(e.getMessage().contains("Value: \"" + input + "\" is not numeric or hexDecimal format!"));
        }
        try {
            input = "";
            TbUtils.hexToBytes(ctx, input);
        } catch (IllegalArgumentException e) {
            Assertions.assertTrue(e.getMessage().contains("Hex string must be not empty"));
        }
    }