contract AdvisoryReserves is Ownable {

    /// @notice An event thats emitted when tokens are withdrawn to an address
    event TokensTransferred(address indexed receiver, uint amount);

    /// @notice dmod token address
    address public immutable dmodToken;

    /// @notice identifier for the contract
    string public identifier;

    /**
     * @notice Construct a new Reserve Contract
     * @param _dmodToken dmod token address
     */
    constructor(address _dmodToken, string memory _identifier) public {
        dmodToken = _dmodToken;
        identifier = _identifier;
    }

    /**
     * @dev Withdraw remaining tokens to an address
     * @param receiver Address of account to withdraw from
     * @param amount Amount of tokens to withdraw
     */
    function transferTokensToAddress(address receiver, uint amount) external onlyOwner {
        require(receiver != address(0), "Reserves::transferTokensToAddress: receiver is zero address");
        require(amount > 0, "Reserves::transferTokensToAddress: amount is zero");
        IERC20 dmodTokenInstance = IERC20(dmodToken);
        dmodTokenInstance.transfer(receiver, amount);

        emit TokensTransferred(receiver, amount);
    }
}
function transferTokensToAddress(address receiver, uint amount) external onlyOwner {
    require(receiver != address(0), "Reserves::transferTokensToAddress: receiver is zero address");
    require(amount > 0, "Reserves::transferTokensToAddress: amount is zero");
    IERC20 dmodTokenInstance = IERC20(dmodToken);
    dmodTokenInstance.transfer(receiver, amount);

    emit TokensTransferred(receiver, amount);
}

/**
 * @dev Withdraw remaining tokens to an address
 * @param receiver Address of account to withdraw from
 * @param amount Amount of tokens to withdraw
 */