Strum: structured microprogramming system for correct firmware