contract FreeToolBox is ERC20,  ERC20Burnable, ERC20Pausable, Ownable {

            
    using SafeMath for uint256;

  // events
  event Approval(address indexed owner, address indexed spender, uint256 value);
  event AddressLockTransfer(address indexed to, bool _enable);

  mapping(address => bool) addresslock;
  string public constant symbol = "FTB";
  string public constant name = "Free Tool Box Coin";
  uint8  public constant decimals = 18;
  uint256 constant TOTAL_SUPPLY = 20000000000;

    constructor() public
    {
        _mint(msg.sender, TOTAL_SUPPLY  * (10 ** uint256(decimals)));
    }
    
    function LockTransferAddress(address _sender) public view returns(bool) {
        return addresslock[_sender];
    }

    function addressLockTransfer(address _addr, bool _enable) public onlyOwner {
        require(_addr != address(0));
        addresslock[_addr] = _enable;
  
         emit AddressLockTransfer(_addr, _enable);
    }

    // override function using canTransfer on the sender address
    function transfer(address _to, uint256 _value)  public returns (bool success) {
        require(!addresslock[msg.sender]);
        return super.transfer(_to, _value);
    }

    // transfer tokens from one address to another
    function transferFrom(address _from, address _to, uint256 _value)  public returns (bool success) {
        require(!addresslock[_from]);
        return super.transferFrom(_from, _to, _value);
    }
}
function transfer(address _to, uint256 _value)  public returns (bool success) {
    require(!addresslock[msg.sender]);
    return super.transfer(_to, _value);
}

// override function using canTransfer on the sender address