interface IERC20 {

  function totalSupply() external view returns (uint256);

  function balanceOf(address who) external view returns (uint256);

  function allowance(address owner, address spender)
    external view returns (uint256);

  // solhint-disable-next-line func-order
  function transfer(address to, uint256 value) external returns (bool);

  // solhint-disable-next-line func-order
  function approve(address spender, uint256 value)
    external returns (bool);

  // solhint-disable-next-line func-order
  function transferFrom(address from, address to, uint256 value)
    external returns (bool);

  // solhint-disable-next-line no-simple-event-func-name
  event Transfer(
    address indexed from,
    address indexed to,
    uint256 value
  );

  event Approval(
    address indexed owner,
    address indexed spender,
    uint256 value
  );
}
/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
function transferFrom(address from, address to, uint256 value)
  external returns (bool);

// solhint-disable-next-line func-order