library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
import "dart:collection" as col;

static method main() → dynamic {
  core::List<core::int>? list = null;
  core::print( block {
    final core::List<core::int> #t1 = <core::int>[];
    #t1.{core::List::add}{Invariant}(1);
    #t1.{core::List::add}{Invariant}(2);
    final core::Iterable<core::int>? #t2 = list;
    if(!#t2.{core::Object::==}(null)) {
      core::Iterator<core::int> :sync-for-iterator = #t2{core::Iterable<core::int>}.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::int #t3 = :sync-for-iterator.{core::Iterator::current};
        #t1.{core::List::add}{Invariant}(#t3);
      }
    }
    #t1.{core::List::add}{Invariant}(3);
  } =>#t1);
  core::print( block {
    final core::List<core::int> #t4 = <core::int>[];
    #t4.{core::List::add}{Invariant}(1);
    #t4.{core::List::add}{Invariant}(2);
    final core::Iterable<core::int>? #t5 = null;
    if(!#t5.{core::Object::==}(null)) {
      core::Iterator<core::int> :sync-for-iterator = #t5{core::Iterable<core::int>}.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::int #t6 = :sync-for-iterator.{core::Iterator::current};
        #t4.{core::List::add}{Invariant}(#t6);
      }
    }
    #t4.{core::List::add}{Invariant}(3);
  } =>#t4);
  core::List<core::int> list1 = block {
    final core::List<core::int> #t7 = <core::int>[];
    final core::Iterable<core::int>? #t8 = list;
    if(!#t8.{core::Object::==}(null)) {
      core::Iterator<core::int> :sync-for-iterator = #t8{core::Iterable<core::int>}.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::int #t9 = :sync-for-iterator.{core::Iterator::current};
        #t7.{core::List::add}{Invariant}(#t9);
      }
    }
  } =>#t7;
  core::List<Never> list2 = block {
    final core::List<Never> #t10 = <Never>[];
    final core::Iterable<Never>? #t11 = null;
    if(!#t11.{core::Object::==}(null)) {
      core::Iterator<Never> :sync-for-iterator = #t11{core::Iterable<Never>}.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final Never #t12 = :sync-for-iterator.{core::Iterator::current};
        #t10.{core::List::add}{Invariant}(#t12);
      }
    }
  } =>#t10;
  core::List<core::int> list3 = block {
    final core::List<core::int> #t13 = <core::int>[];
    #t13.{core::List::add}{Invariant}(1);
    #t13.{core::List::add}{Invariant}(2);
    final core::Iterable<core::int>? #t14 = list;
    if(!#t14.{core::Object::==}(null)) {
      core::Iterator<core::int> :sync-for-iterator = #t14{core::Iterable<core::int>}.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::int #t15 = :sync-for-iterator.{core::Iterator::current};
        #t13.{core::List::add}{Invariant}(#t15);
      }
    }
    #t13.{core::List::add}{Invariant}(3);
  } =>#t13;
  core::List<core::int> list4 = block {
    final core::List<core::int> #t16 = <core::int>[];
    #t16.{core::List::add}{Invariant}(1);
    #t16.{core::List::add}{Invariant}(2);
    final core::Iterable<core::int>? #t17 = null;
    if(!#t17.{core::Object::==}(null)) {
      core::Iterator<core::int> :sync-for-iterator = #t17{core::Iterable<core::int>}.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::int #t18 = :sync-for-iterator.{core::Iterator::current};
        #t16.{core::List::add}{Invariant}(#t18);
      }
    }
    #t16.{core::List::add}{Invariant}(3);
  } =>#t16;
  core::Set<core::int>? set = null;
  core::print( block {
    final core::Set<core::int> #t19 = new col::_CompactLinkedHashSet::•<core::int>();
    #t19.{core::Set::add}{Invariant}(1);
    #t19.{core::Set::add}{Invariant}(2);
    final core::Iterable<core::int>? #t20 = set;
    if(!#t20.{core::Object::==}(null)) {
      core::Iterator<core::int> :sync-for-iterator = #t20{core::Iterable<core::int>}.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::int #t21 = :sync-for-iterator.{core::Iterator::current};
        #t19.{core::Set::add}{Invariant}(#t21);
      }
    }
    #t19.{core::Set::add}{Invariant}(3);
  } =>#t19);
  core::print( block {
    final core::Set<core::int> #t22 = new col::_CompactLinkedHashSet::•<core::int>();
    #t22.{core::Set::add}{Invariant}(1);
    #t22.{core::Set::add}{Invariant}(2);
    final core::Iterable<core::int>? #t23 = null;
    if(!#t23.{core::Object::==}(null)) {
      core::Iterator<core::int> :sync-for-iterator = #t23{core::Iterable<core::int>}.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::int #t24 = :sync-for-iterator.{core::Iterator::current};
        #t22.{core::Set::add}{Invariant}(#t24);
      }
    }
    #t22.{core::Set::add}{Invariant}(3);
  } =>#t22);
  core::Set<core::int> set1 = block {
    final core::Set<core::int> #t25 = new col::_CompactLinkedHashSet::•<core::int>();
    final core::Iterable<dynamic>? #t26 = set;
    if(!#t26.{core::Object::==}(null)) {
      core::Iterator<dynamic> :sync-for-iterator = #t26{core::Iterable<dynamic>}.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final dynamic #t27 = :sync-for-iterator.{core::Iterator::current};
        {
          final core::int #t28 = #t27 as{TypeError,ForNonNullableByDefault} core::int;
          #t25.{core::Set::add}{Invariant}(#t28);
        }
      }
    }
  } =>#t25;
  core::Set<core::int> set3 = block {
    final core::Set<core::int> #t29 = new col::_CompactLinkedHashSet::•<core::int>();
    #t29.{core::Set::add}{Invariant}(1);
    #t29.{core::Set::add}{Invariant}(2);
    final core::Iterable<core::int>? #t30 = set;
    if(!#t30.{core::Object::==}(null)) {
      core::Iterator<core::int> :sync-for-iterator = #t30{core::Iterable<core::int>}.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::int #t31 = :sync-for-iterator.{core::Iterator::current};
        #t29.{core::Set::add}{Invariant}(#t31);
      }
    }
    #t29.{core::Set::add}{Invariant}(3);
  } =>#t29;
  core::Set<core::int> set4 = block {
    final core::Set<core::int> #t32 = new col::_CompactLinkedHashSet::•<core::int>();
    #t32.{core::Set::add}{Invariant}(1);
    #t32.{core::Set::add}{Invariant}(2);
    final core::Iterable<core::int>? #t33 = null;
    if(!#t33.{core::Object::==}(null)) {
      core::Iterator<core::int> :sync-for-iterator = #t33{core::Iterable<core::int>}.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::int #t34 = :sync-for-iterator.{core::Iterator::current};
        #t32.{core::Set::add}{Invariant}(#t34);
      }
    }
    #t32.{core::Set::add}{Invariant}(3);
  } =>#t32;
  core::Map<core::int, core::int>? map = null;
  core::print( block {
    final core::Map<core::int, core::int> #t35 = <core::int, core::int>{};
    #t35.{core::Map::[]=}{Invariant}(1, 1);
    #t35.{core::Map::[]=}{Invariant}(2, 2);
    final core::Map<core::int, core::int>? #t36 = map;
    if(!#t36.{core::Object::==}(null)) {
      core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t36{core::Map<core::int, core::int>}.{core::Map::entries}.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::MapEntry<core::int, core::int> #t37 = :sync-for-iterator.{core::Iterator::current};
        #t35.{core::Map::[]=}{Invariant}(#t37.{core::MapEntry::key}, #t37.{core::MapEntry::value});
      }
    }
    #t35.{core::Map::[]=}{Invariant}(3, 3);
  } =>#t35);
  core::print( block {
    final core::Map<core::int, core::int> #t38 = <core::int, core::int>{};
    #t38.{core::Map::[]=}{Invariant}(1, 1);
    #t38.{core::Map::[]=}{Invariant}(2, 2);
    final core::Map<core::int, core::int>? #t39 = null;
    if(!#t39.{core::Object::==}(null)) {
      core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t39{core::Map<core::int, core::int>}.{core::Map::entries}.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::MapEntry<core::int, core::int> #t40 = :sync-for-iterator.{core::Iterator::current};
        #t38.{core::Map::[]=}{Invariant}(#t40.{core::MapEntry::key}, #t40.{core::MapEntry::value});
      }
    }
    #t38.{core::Map::[]=}{Invariant}(3, 3);
  } =>#t38);
  core::Map<core::int, core::int> map1 = block {
    final core::Map<core::int, core::int> #t41 = <core::int, core::int>{};
    final core::Map<core::int, core::int>? #t42 = map;
    if(!#t42.{core::Object::==}(null)) {
      core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t42{core::Map<core::int, core::int>}.{core::Map::entries}.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::MapEntry<core::int, core::int> #t43 = :sync-for-iterator.{core::Iterator::current};
        #t41.{core::Map::[]=}{Invariant}(#t43.{core::MapEntry::key}, #t43.{core::MapEntry::value});
      }
    }
  } =>#t41;
  core::Map<core::int, core::int> map3 = block {
    final core::Map<core::int, core::int> #t44 = <core::int, core::int>{};
    #t44.{core::Map::[]=}{Invariant}(1, 1);
    #t44.{core::Map::[]=}{Invariant}(2, 2);
    final core::Map<core::int, core::int>? #t45 = map;
    if(!#t45.{core::Object::==}(null)) {
      core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t45{core::Map<core::int, core::int>}.{core::Map::entries}.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::MapEntry<core::int, core::int> #t46 = :sync-for-iterator.{core::Iterator::current};
        #t44.{core::Map::[]=}{Invariant}(#t46.{core::MapEntry::key}, #t46.{core::MapEntry::value});
      }
    }
    #t44.{core::Map::[]=}{Invariant}(3, 3);
  } =>#t44;
  core::Map<core::int, core::int> map4 = block {
    final core::Map<core::int, core::int> #t47 = <core::int, core::int>{};
    #t47.{core::Map::[]=}{Invariant}(1, 1);
    #t47.{core::Map::[]=}{Invariant}(2, 2);
    final core::Map<core::int, core::int>? #t48 = null;
    if(!#t48.{core::Object::==}(null)) {
      core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t48{core::Map<core::int, core::int>}.{core::Map::entries}.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::MapEntry<core::int, core::int> #t49 = :sync-for-iterator.{core::Iterator::current};
        #t47.{core::Map::[]=}{Invariant}(#t49.{core::MapEntry::key}, #t49.{core::MapEntry::value});
      }
    }
    #t47.{core::Map::[]=}{Invariant}(3, 3);
  } =>#t47;
}
