library;
import self as self;
import "dart:core" as core;

static method main() → void {
  final core::List<core::String> works = core::_GrowableList::_literal2<core::String>("b", "l");
  final core::List<core::String> fails = core::_GrowableList::_literal1<core::String>("c");
  {
    synthesized core::Iterator<core::List<core::String>> :sync-for-iterator = core::_GrowableList::_literal2<core::List<core::String>>(works, fails).{core::Iterable::iterator}{core::Iterator<core::List<core::String>>};
    for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
      final core::List<core::String> test = :sync-for-iterator.{core::Iterator::current}{core::List<core::String>};
      {
        {
          void #t1;
          final synthesized core::List<core::String> #0#0 = test;
          synthesized core::int #0#1;
          synthesized core::bool #0#1#isSet = false;
          synthesized core::String #0#4;
          synthesized core::bool #0#4#isSet = false;
          #L1:
          {
            {
              final hoisted core::String b;
              final hoisted core::String d;
              final hoisted core::List<core::String> x;
              if((#0#1#isSet ?{core::int} #0#1{core::int} : let final dynamic #t2 = #0#1#isSet = true in #0#1 = #0#0.{core::List::length}{core::int}).{core::num::>=}(#C1){(core::num) → core::bool}) {
                b = #0#4#isSet ?{core::String} #0#4{core::String} : let final dynamic #t3 = #0#4#isSet = true in #0#4 = #0#0.{core::List::[]}(0){(core::int) → core::String};
                d = #0#0.{core::List::[]}(1){(core::int) → core::String};
                x = #0#0.{core::List::sublist}(2){(core::int, [core::int?]) → core::List<core::String>};
                #t1 = core::print("${b} ${d} ${x}");
                break #L1;
              }
            }
            {
              final hoisted core::String f;
              final hoisted core::List<core::String> args;
              if((#0#1#isSet ?{core::int} #0#1{core::int} : let final dynamic #t4 = #0#1#isSet = true in #0#1 = #0#0.{core::List::length}{core::int}).{core::num::>=}(#C2){(core::num) → core::bool}) {
                f = #0#4#isSet ?{core::String} #0#4{core::String} : let final dynamic #t5 = #0#4#isSet = true in #0#4 = #0#0.{core::List::[]}(0){(core::int) → core::String};
                args = #0#0.{core::List::sublist}(1){(core::int, [core::int?]) → core::List<core::String>};
                #t1 = core::print("${f} ${args}");
                break #L1;
              }
            }
            {
              if(true) {
                #t1 = throw new core::UnimplementedError::•();
                break #L1;
              }
            }
          }
        }
      }
    }
  }
}

constants  {
  #C1 = 2
  #C2 = 1
}
