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

static method method1(core::List<dynamic> o) → dynamic {
  #L1:
  {
    final synthesized core::List<dynamic> #0#0 = o;
    {
      if(#0#0.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1) {
        {
          core::print(o);
        }
      }
    }
  }
  #L2:
  {
    final synthesized core::List<dynamic> #1#0 = o;
    {
      if(#1#0.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C2) {
        {
          core::print(o);
        }
      }
    }
  }
  #L3:
  {
    final synthesized core::List<dynamic> #2#0 = o;
    {
      if(#2#0.{core::List::length}{core::int}.{core::num::>=}(#C1){(core::num) → core::bool}) {
        {
          core::print(o);
        }
      }
    }
  }
  #L4:
  {
    final synthesized core::List<dynamic> #3#0 = o;
    {
      if(#3#0.{core::List::length}{core::int}.{core::num::>=}(#C1){(core::num) → core::bool}) {
        {
          core::print(o);
        }
      }
    }
  }
  #L5:
  {
    final synthesized core::List<dynamic> #4#0 = o;
    {
      if(#4#0.{core::List::length}{core::int}.{core::num::>=}(#C2){(core::num) → core::bool}) {
        {
          core::print(o);
        }
      }
    }
  }
}
static method method2(dynamic o) → dynamic {
  #L6:
  {
    final synthesized dynamic #0#0 = o;
    {
      if(#0#0 is core::List<dynamic> && #0#0{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1) {
        {
          core::print(o{core::List<dynamic>});
        }
      }
    }
  }
  #L7:
  {
    final synthesized dynamic #1#0 = o;
    {
      if(#1#0 is core::List<dynamic> && #1#0{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C2) {
        {
          core::print(o{core::List<dynamic>});
        }
      }
    }
  }
  #L8:
  {
    final synthesized dynamic #2#0 = o;
    {
      if(#2#0 is core::List<dynamic> && #2#0{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::>=}(#C1){(core::num) → core::bool}) {
        {
          core::print(o{core::List<dynamic>});
        }
      }
    }
  }
  #L9:
  {
    final synthesized dynamic #3#0 = o;
    {
      if(#3#0 is core::List<dynamic> && #3#0{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::>=}(#C1){(core::num) → core::bool}) {
        {
          core::print(o{core::List<dynamic>});
        }
      }
    }
  }
  #L10:
  {
    final synthesized dynamic #4#0 = o;
    {
      if(#4#0 is core::List<dynamic> && #4#0{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::>=}(#C2){(core::num) → core::bool}) {
        {
          core::print(o{core::List<dynamic>});
        }
      }
    }
  }
}
static method method3(core::List<dynamic> o) → dynamic {
  #L11:
  {
    final synthesized core::List<dynamic> #0#0 = o;
    {
      if(#0#0.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C2 && #C1 =={core::num::==}{(core::Object) → core::bool} #0#0.{core::List::[]}(1){(core::int) → dynamic}) {
        {
          core::print(o);
        }
      }
    }
  }
  #L12:
  {
    final synthesized core::List<dynamic> #1#0 = o;
    {
      if(#1#0.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C2 && #C1 =={core::num::==}{(core::Object) → core::bool} #1#0.{core::List::[]}(0){(core::int) → dynamic}) {
        {
          core::print(o);
        }
      }
    }
  }
  #L13:
  {
    final synthesized core::List<dynamic> #2#0 = o;
    {
      hoisted core::List<dynamic> a;
      if(#2#0.{core::List::length}{core::int}.{core::num::>=}(#C1){(core::num) → core::bool} && (let final dynamic #t1 = a = #2#0.{core::List::sublist}(1){(core::int, [core::int?]) → core::List<dynamic>} in true)) {
        {
          core::print(o);
        }
      }
    }
  }
  #L14:
  {
    final synthesized core::List<dynamic> #3#0 = o;
    synthesized core::int #3#1;
    synthesized core::bool #3#1#isSet = false;
    {
      hoisted core::List<dynamic> a;
      if((#3#1#isSet ?{core::int} #3#1{core::int} : let final dynamic #t2 = #3#1#isSet = true in #3#1 = #3#0.{core::List::length}{core::int}).{core::num::>=}(#C1){(core::num) → core::bool} && (let final dynamic #t3 = a = #3#0.{core::List::sublist}(0, (#3#1#isSet ?{core::int} #3#1{core::int} : let final dynamic #t4 = #3#1#isSet = true in #3#1 = #3#0.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int, [core::int?]) → core::List<dynamic>} in true)) {
        {
          core::print(o);
        }
      }
    }
  }
  #L15:
  {
    final synthesized core::List<dynamic> #4#0 = o;
    {
      if(#4#0.{core::List::length}{core::int}.{core::num::>=}(#C2){(core::num) → core::bool} && #C1 =={core::num::==}{(core::Object) → core::bool} #4#0.{core::List::[]}(0){(core::int) → dynamic}) {
        {
          core::print(o);
        }
      }
    }
  }
  #L16:
  {
    final synthesized core::List<dynamic> #5#0 = o;
    synthesized core::int #5#1;
    synthesized core::bool #5#1#isSet = false;
    {
      if((#5#1#isSet ?{core::int} #5#1{core::int} : let final dynamic #t5 = #5#1#isSet = true in #5#1 = #5#0.{core::List::length}{core::int}).{core::num::>=}(#C2){(core::num) → core::bool} && #C1 =={core::num::==}{(core::Object) → core::bool} #5#0.{core::List::[]}((#5#1#isSet ?{core::int} #5#1{core::int} : let final dynamic #t6 = #5#1#isSet = true in #5#1 = #5#0.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int) → dynamic}) {
        {
          core::print(o);
        }
      }
    }
  }
}
static method method4(dynamic o) → dynamic {
  #L17:
  {
    final synthesized dynamic #0#0 = o;
    {
      if(#0#0 is core::List<dynamic> && #0#0{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C2 && #C1 =={core::num::==}{(core::Object) → core::bool} #0#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic}) {
        {
          core::print(o{core::List<dynamic>});
        }
      }
    }
  }
  #L18:
  {
    final synthesized dynamic #1#0 = o;
    {
      if(#1#0 is core::List<dynamic> && #1#0{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C2 && #C1 =={core::num::==}{(core::Object) → core::bool} #1#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) {
        {
          core::print(o{core::List<dynamic>});
        }
      }
    }
  }
  #L19:
  {
    final synthesized dynamic #2#0 = o;
    {
      hoisted core::List<dynamic> a;
      if(#2#0 is core::List<dynamic> && #2#0{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::>=}(#C1){(core::num) → core::bool} && (let final dynamic #t7 = a = #2#0{core::List<dynamic>}.{core::List::sublist}(1){(core::int, [core::int?]) → core::List<dynamic>} in true)) {
        {
          core::print(o{core::List<dynamic>});
        }
      }
    }
  }
  #L20:
  {
    final synthesized dynamic #3#0 = o;
    synthesized core::int #3#2;
    synthesized core::bool #3#2#isSet = false;
    {
      hoisted core::List<dynamic> a;
      if(#3#0 is core::List<dynamic> && (#3#2#isSet ?{core::int} #3#2{core::int} : let final dynamic #t8 = #3#2#isSet = true in #3#2 = #3#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::>=}(#C1){(core::num) → core::bool} && (let final dynamic #t9 = a = #3#0{core::List<dynamic>}.{core::List::sublist}(0, (#3#2#isSet ?{core::int} #3#2{core::int} : let final dynamic #t10 = #3#2#isSet = true in #3#2 = #3#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int, [core::int?]) → core::List<dynamic>} in true)) {
        {
          core::print(o{core::List<dynamic>});
        }
      }
    }
  }
  #L21:
  {
    final synthesized dynamic #4#0 = o;
    {
      if(#4#0 is core::List<dynamic> && #4#0{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::>=}(#C2){(core::num) → core::bool} && #C1 =={core::num::==}{(core::Object) → core::bool} #4#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) {
        {
          core::print(o{core::List<dynamic>});
        }
      }
    }
  }
  #L22:
  {
    final synthesized dynamic #5#0 = o;
    synthesized core::int #5#2;
    synthesized core::bool #5#2#isSet = false;
    {
      if(#5#0 is core::List<dynamic> && (#5#2#isSet ?{core::int} #5#2{core::int} : let final dynamic #t11 = #5#2#isSet = true in #5#2 = #5#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::>=}(#C2){(core::num) → core::bool} && #C1 =={core::num::==}{(core::Object) → core::bool} #5#0{core::List<dynamic>}.{core::List::[]}((#5#2#isSet ?{core::int} #5#2{core::int} : let final dynamic #t12 = #5#2#isSet = true in #5#2 = #5#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int) → dynamic}) {
        {
          core::print(o{core::List<dynamic>});
        }
      }
    }
  }
}
static method method5(dynamic o) → dynamic {
  #L23:
  {
    final synthesized dynamic #0#0 = o;
    {
      if(#0#0 is core::List<dynamic> && #0#0{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && #0#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} is core::int) {
        {
          core::print(o{core::List<dynamic>});
        }
      }
    }
  }
  #L24:
  {
    final synthesized dynamic #1#0 = o;
    {
      if(#1#0 is core::List<dynamic> && #1#0{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C2 && #1#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} is core::int && #1#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} is core::String) {
        {
          core::print(o{core::List<dynamic>});
        }
      }
    }
  }
  #L25:
  {
    final synthesized dynamic #2#0 = o;
    {
      if(#2#0 is core::List<dynamic> && #2#0{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::>=}(#C1){(core::num) → core::bool} && #2#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} is core::int) {
        {
          core::print(o{core::List<dynamic>});
        }
      }
    }
  }
  #L26:
  {
    final synthesized dynamic #3#0 = o;
    synthesized core::int #3#2;
    synthesized core::bool #3#2#isSet = false;
    {
      if(#3#0 is core::List<dynamic> && (#3#2#isSet ?{core::int} #3#2{core::int} : let final dynamic #t13 = #3#2#isSet = true in #3#2 = #3#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::>=}(#C1){(core::num) → core::bool} && #3#0{core::List<dynamic>}.{core::List::[]}((#3#2#isSet ?{core::int} #3#2{core::int} : let final dynamic #t14 = #3#2#isSet = true in #3#2 = #3#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int) → dynamic} is core::String) {
        {
          core::print(o{core::List<dynamic>});
        }
      }
    }
  }
  #L27:
  {
    final synthesized dynamic #4#0 = o;
    synthesized core::int #4#2;
    synthesized core::bool #4#2#isSet = false;
    {
      if(#4#0 is core::List<dynamic> && (#4#2#isSet ?{core::int} #4#2{core::int} : let final dynamic #t15 = #4#2#isSet = true in #4#2 = #4#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::>=}(#C2){(core::num) → core::bool} && #4#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} is core::String && #4#0{core::List<dynamic>}.{core::List::[]}((#4#2#isSet ?{core::int} #4#2{core::int} : let final dynamic #t16 = #4#2#isSet = true in #4#2 = #4#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int) → dynamic} is core::int) {
        {
          core::print(o{core::List<dynamic>});
        }
      }
    }
  }
}

constants  {
  #C1 = 1
  #C2 = 2
}
