contract AbstractSweeper {
    //abstract:
    function sweep(address token, uint amount) returns (bool);

    //concrete:
    function () { throw; }

    Controller controller;

    function AbstractSweeper(address _controller) {
        controller = Controller(_controller);
    }

    modifier canSweep() {
        if (msg.sender != controller.authorizedCaller() && msg.sender != controller.owner()) throw;
        if (controller.halted()) throw;
        _;
    }
}
//copyright 2017 NewAlchemy
//Written by Dennis Peterson
function sweep(address token, uint amount) returns (bool);

//abstract: