function approveAndCall(address spender, uint256 value, bytes memory data) public nonReentrant returns (bool) {
        require(approve(spender, value));

        (bool success, bytes memory returnData) = spender.call(data);
        rUtils.requireCode(success ? 0 : 501);

        return true;
    }