|  | library; | 
|  | import self as self; | 
|  | import "dart:core" as core; | 
|  |  | 
|  | typedef E<invariant T extends core::Object? = dynamic> = (T%) → T%; | 
|  | extension Ext<T extends core::Object? = dynamic> on T% { | 
|  | method st = self::Ext|st; | 
|  | method tearoff st = self::Ext|get#st; | 
|  | } | 
|  | static method main() → void { | 
|  | self::foo<core::num>(false, 0, 0); | 
|  | } | 
|  | static method foo<X extends core::Object? = dynamic>(core::bool test, self::foo::X% a, self::foo::X% b) → void { | 
|  | if(!(a is core::int)) | 
|  | return; | 
|  | { | 
|  | self::foo::X% c = let final self::foo::X% & core::int /* '%' & '!' = '!' */ #t1 = test ?{self::foo::X% & core::int /* '%' & '!' = '!' */} a{self::foo::X% & core::int /* '%' & '!' = '!' */} : a{self::foo::X% & core::int /* '%' & '!' = '!' */} in block { | 
|  | #t1.{core::int::toRadixString}(2){(core::int) → core::String}; | 
|  | self::Ext|st<self::foo::X%, (self::foo::X%) → self::foo::X%>(#t1); | 
|  | } =>#t1; | 
|  | { | 
|  | self::foo::X% v1 = c{self::foo::X% & core::int /* '%' & '!' = '!' */}; | 
|  | core::int v2 = c{self::foo::X% & core::int /* '%' & '!' = '!' */}; | 
|  | self::Ext|get#st<self::foo::X%>(c{self::foo::X% & core::int /* '%' & '!' = '!' */})<(self::foo::X%) → self::foo::X%>; | 
|  | c = a{self::foo::X% & core::int /* '%' & '!' = '!' */} as self::foo::X%; | 
|  | } | 
|  | } | 
|  | if(!(b is core::int)) | 
|  | return; | 
|  | { | 
|  | self::foo::X% c = let final self::foo::X% & core::int /* '%' & '!' = '!' */ #t2 = test ?{self::foo::X% & core::int /* '%' & '!' = '!' */} a{self::foo::X% & core::int /* '%' & '!' = '!' */} : b{self::foo::X% & core::int /* '%' & '!' = '!' */} in block { | 
|  | #t2.{core::int::toRadixString}(2){(core::int) → core::String}; | 
|  | self::Ext|st<self::foo::X%, (self::foo::X%) → self::foo::X%>(#t2); | 
|  | } =>#t2; | 
|  | { | 
|  | self::foo::X% v1 = c{self::foo::X% & core::int /* '%' & '!' = '!' */}; | 
|  | core::int v2 = c{self::foo::X% & core::int /* '%' & '!' = '!' */}; | 
|  | self::Ext|get#st<self::foo::X%>(c{self::foo::X% & core::int /* '%' & '!' = '!' */})<(self::foo::X%) → self::foo::X%>; | 
|  | c = a{self::foo::X% & core::int /* '%' & '!' = '!' */} as self::foo::X%; | 
|  | } | 
|  | } | 
|  | } | 
|  | static extension-member method Ext|st<T extends core::Object? = dynamic, S extends (self::Ext|st::T%) → self::Ext|st::T% = (dynamic) → dynamic>(lowered final self::Ext|st::T% #this) → void {} | 
|  | static extension-member method Ext|get#st<T extends core::Object? = dynamic>(lowered final self::Ext|get#st::T% #this) → <S extends (self::Ext|get#st::T%) → self::Ext|get#st::T% = (dynamic) → dynamic>() → void | 
|  | return <S extends (self::Ext|get#st::T%) → self::Ext|get#st::T% = (dynamic) → dynamic>() → void => self::Ext|st<self::Ext|get#st::T%, S>(#this); |