interface IStakingToken {
    // Views
    function endStakingTime(address account) external view returns (uint256);

    function totalSupply() external view returns (uint256);

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

    function canWithdraw(address account) external view returns (bool);

    function canStake(address account) external view returns (bool);

    function canExtend(address account) external view returns (bool);

    // Mutative

    function stake(uint256 amount) external;

    function withdraw() external;
    function emergencyWithdraw(address _token) external;

    function extend() external; 
}
// Dependency file: contracts\interfaces\IStakingToken.sol
// pragma solidity >=0.4.24;
function endStakingTime(address account) external view returns (uint256);

// Views