Who needs to compare things case insensitively when you're able to generate every permutation of uppercase and lowercase? No one! That's the answer. No one does. Your task is to achieve this feat; generate all possible permutations of uppercase/lowercase for a given input.
A string of printable standard ascii characters. Input should not be assumed to be all lowercase. Input will always be at least one character.
Every permutation of uppercase and lowercase for the inputted string (no duplicates). This should only change characters with a small and large version (numbers will stay the same). Each permutation must be output as a string or a list of characters; lists of singleton strings are not allowed.
a1a ['a1a', 'a1A', 'A1a', 'A1A'] abc ['abc', 'abC', 'aBc', 'aBC', 'Abc', 'AbC', 'ABc', 'ABC'] Hi! ['hi!', 'hI!', 'Hi!', 'HI!']
This is code-golf, so the shortest answer (in bytes) wins.
As a fun extra see how much additional effort it will take to handle the extended ascii characters, here is an extra test case:
ž1a -> ['ž1a', 'ž1A', 'Ž1a', 'Ž1A']
(your program does not need to support this)