contract Reserve {
    address public governance;

    event Transfer(address indexed token, address indexed destination, uint amount);

    constructor() public {
        governance = msg.sender;
    }

    modifier onlyGov() {
        require(msg.sender == governance);
        _;
    }

    function reserves(address _token)
        public
        view
        returns (uint256)
    {
        return IERC20(_token).balanceOf(address(this));
    }

    /*** GOV ***/

    function setGovernance(address _governance)
        public
        onlyGov
    {
        governance = _governance;
    }

    function transferFromReserve(
        address _token,
        address _destination,
        uint256 _amount
    )
        public
        onlyGov
    {
        require(_amount <= reserves(_token), "transferFromReserve: not enough in reserve");
        SafeERC20.safeTransfer(IERC20(_token), _destination, _amount);

        emit Transfer(_token, _destination, _amount);
    }
}
// Reserve contract. Controlled by governance
function setGovernance(address _governance)
    public
    onlyGov
{
    governance = _governance;
}

/*** GOV ***/