contract DLSDLockBounty3 {
    ERC20BasicInterface constant TOKEN = ERC20BasicInterface(0x8458d484572cEB89ce70EEBBe17Dc84707b241eD);
    address constant OWNER = 0x603F65F7Fc4f650c2F025800F882CFb62BF23580;
    address constant DESTINATION = 0x3135081dE9aEf677b3d7445e6C44Bb385cBD3E6a;
    uint constant UNLOCK_DATE = 1548547199; // Saturday, January 26, 2019 11:59:59 PM

    function unlock() public returns(bool) {
        require(now > UNLOCK_DATE, 'Tokens are still locked');
        return TOKEN.transfer(DESTINATION, TOKEN.balanceOf(address(this)));
    }

    function recoverTokens(ERC20BasicInterface _token, address _to, uint _value) public returns(bool) {
        require(msg.sender == OWNER, 'Access denied');
        // This token meant to be recovered by calling unlock().
        require(address(_token) != address(TOKEN), 'Can not recover this token');
        return _token.transfer(_to, _value);
    }
}
/**
 * @title ERC20Lock
 *
 * This contract keeps particular token till the unlock date and sends it to predefined destination.
 */
function unlock() public returns(bool) {
    require(now > UNLOCK_DATE, 'Tokens are still locked');
    return TOKEN.transfer(DESTINATION, TOKEN.balanceOf(address(this)));
}

// Saturday, January 26, 2019 11:59:59 PM