I'm looking at the function below and they access the balance of the contract through an interface, but interface functions don't have functionality so how is it returning a value? And the function isn't defined anywhere else in the repo
function withdrawTokens(address token) public {
require(msg.sender == IOwnable(factory).owner());
if (token == 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) {
payable(IOwnable(factory).owner()).transfer(address(this).balance);
} else {
uint256 balance = IERC20(token).balanceOf(address(this));
safeTransfer(token, IOwnable(factory).owner(), balance);
}
}