Optimizing Obfuscation: Avoiding Barrington`s Theorem