contract TokenVault {
    address public owner;
    address public token;

    constructor(address _owner, address _token) public {
        owner = _owner;
        token = _token;
    }
     /**
     * @dev transfers token to 'whom' address with 'amount'.
     */
    function transferToken(address _whom, uint256 _amount)
        public
        returns (bool)
    {
        require(msg.sender == owner, "caller should be owner");
        safeTransfer(_whom, _amount);
        return true;
    }

    function safeTransfer(address to, uint256 value) internal {
        // bytes4(keccak256(bytes('transfer(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))),"TransferHelper: TRANSFER_FAILED" );
    }
}
function transferToken(address _whom, uint256 _amount)
    public
    returns (bool)
{
    require(msg.sender == owner, "caller should be owner");
    safeTransfer(_whom, _amount);
    return true;
}

/**
 * @dev transfers token to 'whom' address with 'amount'.
 */