replace delay()

Here's something I'd try. You use this pattern a lot:

    digitalWrite(Leds[0], LOW);

I wonder if it generates less code to replace all those calls with calls to a function to do the dereference:

    // global LED control function
    void setLed(byte led, byte lohi) { 
        digitalWrite(Leds[led], lohi);
    }

    // replace all digitalWrite(Leds[0], LOW); with:
    setLed(0, LOW);

It would be easy to try on a few cases to see what the space impact is.

-br