contract TokenHolder is ITokenHolder, Owned, Utils {
    /**
        @dev initializes a new TokenHolder instance
    */
    constructor() public {
    }

    /**
        @dev withdraws tokens held by the contract and sends them to an account
        can only be called by the owner

        @param _token   ERC20 token contract address
        @param _to      account to receive the new amount
        @param _amount  amount to withdraw
    */
    function withdrawTokens(IERC20Token _token, address _to, uint256 _amount)
        public
        ownerOnly
        validAddress(_token)
        validAddress(_to)
        notThis(_to)
    {
        INonStandardERC20(_token).transfer(_to, _amount);
    }
}
/**
 @dev We consider every contract to be a 'token holder' since it's currently not possible
 for a contract to deny receiving tokens.
 
 The TokenHolder's contract sole purpose is to provide a safety mechanism that allows
 the owner to send tokens that were sent to the contract by mistake back to their sender.
 
 Note that we use the non standard ERC-20 interface which has no return value for transfer
 in order to support both non standard as well as standard token contracts.
 see https://github.com/ethereum/solidity/issues/4116
 */
function withdrawTokens(IERC20Token _token, address _to, uint256 _amount)
    public
    ownerOnly
    validAddress(_token)
    validAddress(_to)
    notThis(_to)
{
    INonStandardERC20(_token).transfer(_to, _amount);
}

/**
 @dev withdraws tokens held by the contract and sends them to an account
 can only be called by the owner
 
 @param _token   ERC20 token contract address
 @param _to      account to receive the new amount
 @param _amount  amount to withdraw
 */