**** New definitions: A, type: {ID:s, V:i8?}*
**** New definitions: B, type: {ID:s, V:i8?}*
**** New definitions: C, type: {ID:s, V:i8?}*
**** New definitions: D, type: {ID:s, V:i8?}*
**** New definitions: E, type: {ID:s, V:i8?}*
**** New definitions: XS, type: {ID:s, V:i8?}**
**** New definitions: YS, type: {ID:s, V:i8?}**

> A
A : {ID:s, V:i8?}*
BndKind:Global, Type:{ID:s, V:i8?}*, Bnd:(Global(A))
// (∂.A:{ID:s, V:i8?}*) : {ID:s, V:i8?}*
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{str,i8}>
      1) stloc.0 [Seq<{str,i8}>]
      1) ldloc.0 [Seq<{str,i8}>]
      1) ret
  Total Size: 11

Func sig: (A:{ID:s, V:i8?}*) to {ID:s, V:i8?}*
Sequence: Seq<{str,i8}>
 0) { ID: A0, V: 0 }
 1) { ID: A1, V: 1 }
 2) { ID: A3, V: <null> }
 3) { ID: A4, V: 4 }
 4) { ID: A6, V: 6 }
 5) { ID: A7, V: 7 }
 6) { ID: A9, V: 9 }
 7) { ID: A10, V: <null> }
 8) { ID: A12, V: 12 }
 9) { ID: A13, V: 13 }
10) { ID: A15, V: 15 }
11) { ID: A16, V: 16 }
12) { ID: A18, V: 18 }
13) { ID: A19, V: 19 }
###
> B
B : {ID:s, V:i8?}*
BndKind:Global, Type:{ID:s, V:i8?}*, Bnd:(Global(B))
// (∂.B:{ID:s, V:i8?}*) : {ID:s, V:i8?}*
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{str,i8}>
      1) stloc.0 [Seq<{str,i8}>]
      1) ldloc.0 [Seq<{str,i8}>]
      1) ret
  Total Size: 11

Func sig: (B:{ID:s, V:i8?}*) to {ID:s, V:i8?}*
Sequence: Seq<{str,i8}>
 0) { ID: B0, V: 0 }
 1) { ID: B1, V: 0 }
 2) { ID: B4, V: 2 }
 3) { ID: B5, V: 2 }
 4) { ID: B6, V: <null> }
 5) { ID: B7, V: <null> }
 6) { ID: B8, V: 4 }
 7) { ID: B9, V: 4 }
 8) { ID: B12, V: 6 }
 9) { ID: B13, V: 6 }
10) { ID: B14, V: 7 }
11) { ID: B15, V: 7 }
12) { ID: B16, V: <null> }
13) { ID: B17, V: <null> }
14) { ID: B20, V: 10 }
15) { ID: B21, V: 10 }
16) { ID: B22, V: 11 }
17) { ID: B23, V: 11 }
18) { ID: B24, V: 12 }
19) { ID: B25, V: 12 }
20) { ID: B28, V: 14 }
21) { ID: B29, V: 14 }
22) { ID: B30, V: 15 }
23) { ID: B31, V: 15 }
24) { ID: B32, V: 16 }
25) { ID: B33, V: 16 }
26) { ID: B36, V: <null> }
27) { ID: B37, V: <null> }
28) { ID: B38, V: 19 }
29) { ID: B39, V: 19 }
###
> C
C : {ID:s, V:i8?}*
BndKind:Global, Type:{ID:s, V:i8?}*, Bnd:(Global(C))
// (∂.C:{ID:s, V:i8?}*) : {ID:s, V:i8?}*
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{str,i8}>
      1) stloc.0 [Seq<{str,i8}>]
      1) ldloc.0 [Seq<{str,i8}>]
      1) ret
  Total Size: 11

Func sig: (C:{ID:s, V:i8?}*) to {ID:s, V:i8?}*
Sequence: Seq<{str,i8}>
 0) { ID: C0, V: <null> }
 1) { ID: C1, V: <null> }
 2) { ID: C2, V: <null> }
###
> D
D : {ID:s, V:i8?}*
BndKind:Global, Type:{ID:s, V:i8?}*, Bnd:(Global(D))
// (∂.D:{ID:s, V:i8?}*) : {ID:s, V:i8?}*
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{str,i8}>
      1) stloc.0 [Seq<{str,i8}>]
      1) ldloc.0 [Seq<{str,i8}>]
      1) ret
  Total Size: 11

Func sig: (D:{ID:s, V:i8?}*) to {ID:s, V:i8?}*
Sequence: Seq<{str,i8}>
 0) { ID: D0, V: 11 }
 1) { ID: D1, V: 12 }
 2) { ID: D2, V: 13 }
###
> CrossJoin(X:XS, Y:YS, true, CrossJoin(x:X, y:Y, Wrap(x.V  = y.V), { IDX:x.ID, IDY:y.ID, VX:x.V, VY:y.V }))
CrossJoin(X : XS, Y : YS, true, CrossJoin(x : X, y : Y, Wrap(x.V @= y.V), { IDX : x.ID, IDY : y.ID, VX : x.V, VY : y.V })) : {IDX:s, IDY:s, VX:i8?, VY:i8?}**
BndKind:Call, Type:{IDX:s, IDY:s, VX:i8?, VY:i8?}**, Bnd:(Call(∂.CrossJoin([map:1] Global(XS), [map:2] Global(YS), true:b, Call(∂.CrossJoin([map:3] Scope(1), [map:4] Scope(2), Call(∂.Test.Wrap(Cmp(GetField(Scope(3), V) @= GetField(Scope(4), V))):b), {IDX:GetField(Scope(3), ID), IDY:GetField(Scope(4), ID), VX:GetField(Scope(3), V), VY:GetField(Scope(4), V)})))))
// (<ctx>, ∂.XS:{ID:s, V:i8?}**, ∂.YS:{ID:s, V:i8?}**) : {IDX:s, IDY:s, VX:i8?, VY:i8?}**
CrossJoin_2(Arr<obj>, Seq<{str,i8}>, Seq<{str,i8}>):bool
      1) ldc.i4.1
      1) ret
  Total Size: 2

CrossJoin_2(Arr<obj>, {str,i8}, {str,i8}):bool
      1) ldarg.1 [{str,i8}]
      1) dup
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      5) ldfld {str,i8}::_F1:i8
      5) newobj Opt<i8>(i8)
      5) br [1]
  Label [0]:
      1) pop
      5) call static CodeGenUtil::GetDefault():Opt<i8>
  Label [1]:
      1) stloc.0 [Opt<i8>]
      1) ldarg.2 [{str,i8}]
      1) dup
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [2]
      5) ldfld {str,i8}::_F1:i8
      5) newobj Opt<i8>(i8)
      5) br [3]
  Label [2]:
      1) pop
      5) call static CodeGenUtil::GetDefault():Opt<i8>
  Label [3]:
      1) stloc.1 [Opt<i8>]
      2) ldloca.s [Opt<i8> (0)]
      5) call Opt<i8>::get_HasValue():bool
      2) ldloca.s [Opt<i8> (1)]
      5) call Opt<i8>::get_HasValue():bool
      5) bne.un [4]
      2) ldloca.s [Opt<i8> (0)]
      5) call Opt<i8>::GetValueOrDefault():i8
      2) ldloca.s [Opt<i8> (1)]
      5) call Opt<i8>::GetValueOrDefault():i8
      2) ceq
      5) br [5]
  Label [4]:
      1) ldc.i4.0
  Label [5]:
      5) call static WrapFuncGen::Exec(bool):bool
      1) ret
  Total Size: 119

CrossJoin_3(Arr<obj>, {str,i8}, {str,i8}):{str,str,i8,i8}
      5) newobj {str,str,i8,i8}()
      1) dup
      1) ldc.i4.3
      5) stfld {str,str,i8,i8}::_B0:u1
      1) stloc.0 [{str,str,i8,i8}]
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F0:str
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F1:str
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.4
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F1:i8
      5) stfld {str,str,i8,i8}::_F2:i8
  Label [0]:
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [1]
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.8
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F1:i8
      5) stfld {str,str,i8,i8}::_F3:i8
  Label [1]:
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 130

CrossJoin_3(Arr<obj>, Seq<{str,i8}>, Seq<{str,i8}>):Seq<{str,str,i8,i8}>
      1) ldarg.1 [Seq<{str,i8}>]
      1) ldarg.2 [Seq<{str,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<{str,i8},{str,i8},bool>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [Func<{str,i8},{str,i8},{str,str,i8,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [ExecCtx]
      1) ldc.i4.0
      5) call static CrossJoinGen::Exec(Seq<{str,i8}>, Seq<{str,i8}>, Func<{str,i8},{str,i8},bool>, Func<{str,i8},{str,i8},{str,str,i8,i8}>, ExecCtx, i4):Seq<{str,str,i8,i8}>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<{str,str,i8,i8}>):Seq<{str,str,i8,i8}>
      1) ret
  Total Size: 47

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):ExecCtx
      1) stloc.0 [ExecCtx]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<Seq<{str,i8}>>
      1) stloc.1 [Seq<Seq<{str,i8}>>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.2
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<Seq<{str,i8}>>
      1) stloc.2 [Seq<Seq<{str,i8}>>]
      1) ldloc.1 [Seq<Seq<{str,i8}>>]
      1) ldloc.2 [Seq<Seq<{str,i8}>>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<Seq<{str,i8}>,Seq<{str,i8}>,bool>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [MethodInfo]
      5) ldtoken [Func<Seq<{str,i8}>,Seq<{str,i8}>,Seq<{str,str,i8,i8}>>]
      5) call static Type::GetTypeFromHandle(RuntimeTypeHandle):Type
      1) ldc.i4.2
      5) newarr [obj]
      1) dup
      1) ldc.i4.0
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Arr<obj>]
      5) stelem [Arr<obj>]
      1) dup
      1) ldc.i4.1
      1) ldloc.0 [ExecCtx]
      5) stelem [ExecCtx]
      5) callvirt DynamicMethod::CreateDelegate(Type, obj):Delegate
      1) ldloc.0 [ExecCtx]
      1) ldc.i4.2
      5) call static CrossJoinGen::Exec(Seq<Seq<{str,i8}>>, Seq<Seq<{str,i8}>>, Func<Seq<{str,i8}>,Seq<{str,i8}>,bool>, Func<Seq<{str,i8}>,Seq<{str,i8}>,Seq<{str,str,i8,i8}>>, ExecCtx, i4):Seq<Seq<{str,str,i8,i8}>>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<Seq<{str,str,i8,i8}>>):Seq<Seq<{str,str,i8,i8}>>
      1) ret
  Total Size: 99

Func sig: (<ctx>:x, XS:{ID:s, V:i8?}**, YS:{ID:s, V:i8?}**) to {IDX:s, IDY:s, VX:i8?, VY:i8?}**
Sequence: Seq<Seq<{str,str,i8,i8}>>
 0) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: A0, VX: 0, VY: 0 }
     1) { IDX: A1, IDY: A1, VX: 1, VY: 1 }
     2) { IDX: A3, IDY: A3, VX: <null>, VY: <null> }
     3) { IDX: A3, IDY: A10, VX: <null>, VY: <null> }
     4) { IDX: A4, IDY: A4, VX: 4, VY: 4 }
     5) { IDX: A6, IDY: A6, VX: 6, VY: 6 }
     6) { IDX: A7, IDY: A7, VX: 7, VY: 7 }
     7) { IDX: A9, IDY: A9, VX: 9, VY: 9 }
     8) { IDX: A10, IDY: A3, VX: <null>, VY: <null> }
     9) { IDX: A10, IDY: A10, VX: <null>, VY: <null> }
    10) { IDX: A12, IDY: A12, VX: 12, VY: 12 }
    11) { IDX: A13, IDY: A13, VX: 13, VY: 13 }
    12) { IDX: A15, IDY: A15, VX: 15, VY: 15 }
    13) { IDX: A16, IDY: A16, VX: 16, VY: 16 }
    14) { IDX: A18, IDY: A18, VX: 18, VY: 18 }
    15) { IDX: A19, IDY: A19, VX: 19, VY: 19 }
 1) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: B0, VX: 0, VY: 0 }
     1) { IDX: A0, IDY: B1, VX: 0, VY: 0 }
     2) { IDX: A3, IDY: B6, VX: <null>, VY: <null> }
     3) { IDX: A3, IDY: B7, VX: <null>, VY: <null> }
     4) { IDX: A3, IDY: B16, VX: <null>, VY: <null> }
     5) { IDX: A3, IDY: B17, VX: <null>, VY: <null> }
     6) { IDX: A3, IDY: B36, VX: <null>, VY: <null> }
     7) { IDX: A3, IDY: B37, VX: <null>, VY: <null> }
     8) { IDX: A4, IDY: B8, VX: 4, VY: 4 }
     9) { IDX: A4, IDY: B9, VX: 4, VY: 4 }
    10) { IDX: A6, IDY: B12, VX: 6, VY: 6 }
    11) { IDX: A6, IDY: B13, VX: 6, VY: 6 }
    12) { IDX: A7, IDY: B14, VX: 7, VY: 7 }
    13) { IDX: A7, IDY: B15, VX: 7, VY: 7 }
    14) { IDX: A10, IDY: B6, VX: <null>, VY: <null> }
    15) { IDX: A10, IDY: B7, VX: <null>, VY: <null> }
    16) { IDX: A10, IDY: B16, VX: <null>, VY: <null> }
    17) { IDX: A10, IDY: B17, VX: <null>, VY: <null> }
    18) { IDX: A10, IDY: B36, VX: <null>, VY: <null> }
    19) { IDX: A10, IDY: B37, VX: <null>, VY: <null> }
    20) { IDX: A12, IDY: B24, VX: 12, VY: 12 }
    21) { IDX: A12, IDY: B25, VX: 12, VY: 12 }
    22) { IDX: A15, IDY: B30, VX: 15, VY: 15 }
    23) { IDX: A15, IDY: B31, VX: 15, VY: 15 }
    24) { IDX: A16, IDY: B32, VX: 16, VY: 16 }
    25) { IDX: A16, IDY: B33, VX: 16, VY: 16 }
    26) { IDX: A19, IDY: B38, VX: 19, VY: 19 }
    27) { IDX: A19, IDY: B39, VX: 19, VY: 19 }
 2) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A3, IDY: C0, VX: <null>, VY: <null> }
     1) { IDX: A3, IDY: C1, VX: <null>, VY: <null> }
     2) { IDX: A3, IDY: C2, VX: <null>, VY: <null> }
     3) { IDX: A10, IDY: C0, VX: <null>, VY: <null> }
     4) { IDX: A10, IDY: C1, VX: <null>, VY: <null> }
     5) { IDX: A10, IDY: C2, VX: <null>, VY: <null> }
 3) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A12, IDY: D1, VX: 12, VY: 12 }
     1) { IDX: A13, IDY: D2, VX: 13, VY: 13 }
 4) Sequence: Seq<{str,str,i8,i8}>
 5) <null>
 6) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: A0, VX: 0, VY: 0 }
     1) { IDX: B1, IDY: A0, VX: 0, VY: 0 }
     2) { IDX: B6, IDY: A3, VX: <null>, VY: <null> }
     3) { IDX: B6, IDY: A10, VX: <null>, VY: <null> }
     4) { IDX: B7, IDY: A3, VX: <null>, VY: <null> }
     5) { IDX: B7, IDY: A10, VX: <null>, VY: <null> }
     6) { IDX: B8, IDY: A4, VX: 4, VY: 4 }
     7) { IDX: B9, IDY: A4, VX: 4, VY: 4 }
     8) { IDX: B12, IDY: A6, VX: 6, VY: 6 }
     9) { IDX: B13, IDY: A6, VX: 6, VY: 6 }
    10) { IDX: B14, IDY: A7, VX: 7, VY: 7 }
    11) { IDX: B15, IDY: A7, VX: 7, VY: 7 }
    12) { IDX: B16, IDY: A3, VX: <null>, VY: <null> }
    13) { IDX: B16, IDY: A10, VX: <null>, VY: <null> }
    14) { IDX: B17, IDY: A3, VX: <null>, VY: <null> }
    15) { IDX: B17, IDY: A10, VX: <null>, VY: <null> }
    16) { IDX: B24, IDY: A12, VX: 12, VY: 12 }
    17) { IDX: B25, IDY: A12, VX: 12, VY: 12 }
    18) { IDX: B30, IDY: A15, VX: 15, VY: 15 }
    19) { IDX: B31, IDY: A15, VX: 15, VY: 15 }
    20) { IDX: B32, IDY: A16, VX: 16, VY: 16 }
    21) { IDX: B33, IDY: A16, VX: 16, VY: 16 }
    22) { IDX: B36, IDY: A3, VX: <null>, VY: <null> }
    23) { IDX: B36, IDY: A10, VX: <null>, VY: <null> }
    24) { IDX: B37, IDY: A3, VX: <null>, VY: <null> }
    25) { IDX: B37, IDY: A10, VX: <null>, VY: <null> }
    26) { IDX: B38, IDY: A19, VX: 19, VY: 19 }
    27) { IDX: B39, IDY: A19, VX: 19, VY: 19 }
 7) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: B0, VX: 0, VY: 0 }
     1) { IDX: B0, IDY: B1, VX: 0, VY: 0 }
     2) { IDX: B1, IDY: B0, VX: 0, VY: 0 }
     3) { IDX: B1, IDY: B1, VX: 0, VY: 0 }
     4) { IDX: B4, IDY: B4, VX: 2, VY: 2 }
     5) { IDX: B4, IDY: B5, VX: 2, VY: 2 }
     6) { IDX: B5, IDY: B4, VX: 2, VY: 2 }
     7) { IDX: B5, IDY: B5, VX: 2, VY: 2 }
     8) { IDX: B6, IDY: B6, VX: <null>, VY: <null> }
     9) { IDX: B6, IDY: B7, VX: <null>, VY: <null> }
    10) { IDX: B6, IDY: B16, VX: <null>, VY: <null> }
    11) { IDX: B6, IDY: B17, VX: <null>, VY: <null> }
    12) { IDX: B6, IDY: B36, VX: <null>, VY: <null> }
    13) { IDX: B6, IDY: B37, VX: <null>, VY: <null> }
    14) { IDX: B7, IDY: B6, VX: <null>, VY: <null> }
    15) { IDX: B7, IDY: B7, VX: <null>, VY: <null> }
    16) { IDX: B7, IDY: B16, VX: <null>, VY: <null> }
    17) { IDX: B7, IDY: B17, VX: <null>, VY: <null> }
    18) { IDX: B7, IDY: B36, VX: <null>, VY: <null> }
    19) { IDX: B7, IDY: B37, VX: <null>, VY: <null> }
    20) { IDX: B8, IDY: B8, VX: 4, VY: 4 }
    21) { IDX: B8, IDY: B9, VX: 4, VY: 4 }
    22) { IDX: B9, IDY: B8, VX: 4, VY: 4 }
    23) { IDX: B9, IDY: B9, VX: 4, VY: 4 }
    24) { IDX: B12, IDY: B12, VX: 6, VY: 6 }
    25) { IDX: B12, IDY: B13, VX: 6, VY: 6 }
    26) { IDX: B13, IDY: B12, VX: 6, VY: 6 }
    27) { IDX: B13, IDY: B13, VX: 6, VY: 6 }
    28) { IDX: B14, IDY: B14, VX: 7, VY: 7 }
    29) { IDX: B14, IDY: B15, VX: 7, VY: 7 }
    30) { IDX: B15, IDY: B14, VX: 7, VY: 7 }
    31) { IDX: B15, IDY: B15, VX: 7, VY: 7 }
    32) { IDX: B16, IDY: B6, VX: <null>, VY: <null> }
    33) { IDX: B16, IDY: B7, VX: <null>, VY: <null> }
    34) { IDX: B16, IDY: B16, VX: <null>, VY: <null> }
    35) { IDX: B16, IDY: B17, VX: <null>, VY: <null> }
    36) { IDX: B16, IDY: B36, VX: <null>, VY: <null> }
    37) { IDX: B16, IDY: B37, VX: <null>, VY: <null> }
    38) { IDX: B17, IDY: B6, VX: <null>, VY: <null> }
    39) { IDX: B17, IDY: B7, VX: <null>, VY: <null> }
    40) { IDX: B17, IDY: B16, VX: <null>, VY: <null> }
    41) { IDX: B17, IDY: B17, VX: <null>, VY: <null> }
    42) { IDX: B17, IDY: B36, VX: <null>, VY: <null> }
    43) { IDX: B17, IDY: B37, VX: <null>, VY: <null> }
    44) { IDX: B20, IDY: B20, VX: 10, VY: 10 }
    45) { IDX: B20, IDY: B21, VX: 10, VY: 10 }
    46) { IDX: B21, IDY: B20, VX: 10, VY: 10 }
    47) { IDX: B21, IDY: B21, VX: 10, VY: 10 }
    48) { IDX: B22, IDY: B22, VX: 11, VY: 11 }
    49) { IDX: B22, IDY: B23, VX: 11, VY: 11 }
    50) { IDX: B23, IDY: B22, VX: 11, VY: 11 }
    51) { IDX: B23, IDY: B23, VX: 11, VY: 11 }
    52) { IDX: B24, IDY: B24, VX: 12, VY: 12 }
    53) { IDX: B24, IDY: B25, VX: 12, VY: 12 }
    54) { IDX: B25, IDY: B24, VX: 12, VY: 12 }
    55) { IDX: B25, IDY: B25, VX: 12, VY: 12 }
    56) { IDX: B28, IDY: B28, VX: 14, VY: 14 }
    57) { IDX: B28, IDY: B29, VX: 14, VY: 14 }
    58) { IDX: B29, IDY: B28, VX: 14, VY: 14 }
    59) { IDX: B29, IDY: B29, VX: 14, VY: 14 }
    60) { IDX: B30, IDY: B30, VX: 15, VY: 15 }
    61) { IDX: B30, IDY: B31, VX: 15, VY: 15 }
    62) { IDX: B31, IDY: B30, VX: 15, VY: 15 }
    63) { IDX: B31, IDY: B31, VX: 15, VY: 15 }
    64) { IDX: B32, IDY: B32, VX: 16, VY: 16 }
    65) { IDX: B32, IDY: B33, VX: 16, VY: 16 }
    66) { IDX: B33, IDY: B32, VX: 16, VY: 16 }
    67) { IDX: B33, IDY: B33, VX: 16, VY: 16 }
    68) { IDX: B36, IDY: B6, VX: <null>, VY: <null> }
    69) { IDX: B36, IDY: B7, VX: <null>, VY: <null> }
    70) { IDX: B36, IDY: B16, VX: <null>, VY: <null> }
    71) { IDX: B36, IDY: B17, VX: <null>, VY: <null> }
    72) { IDX: B36, IDY: B36, VX: <null>, VY: <null> }
    73) { IDX: B36, IDY: B37, VX: <null>, VY: <null> }
    74) { IDX: B37, IDY: B6, VX: <null>, VY: <null> }
    75) { IDX: B37, IDY: B7, VX: <null>, VY: <null> }
    76) { IDX: B37, IDY: B16, VX: <null>, VY: <null> }
    77) { IDX: B37, IDY: B17, VX: <null>, VY: <null> }
    78) { IDX: B37, IDY: B36, VX: <null>, VY: <null> }
    79) { IDX: B37, IDY: B37, VX: <null>, VY: <null> }
    80) { IDX: B38, IDY: B38, VX: 19, VY: 19 }
    81) { IDX: B38, IDY: B39, VX: 19, VY: 19 }
    82) { IDX: B39, IDY: B38, VX: 19, VY: 19 }
    83) { IDX: B39, IDY: B39, VX: 19, VY: 19 }
 8) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B6, IDY: C0, VX: <null>, VY: <null> }
     1) { IDX: B6, IDY: C1, VX: <null>, VY: <null> }
     2) { IDX: B6, IDY: C2, VX: <null>, VY: <null> }
     3) { IDX: B7, IDY: C0, VX: <null>, VY: <null> }
     4) { IDX: B7, IDY: C1, VX: <null>, VY: <null> }
     5) { IDX: B7, IDY: C2, VX: <null>, VY: <null> }
     6) { IDX: B16, IDY: C0, VX: <null>, VY: <null> }
     7) { IDX: B16, IDY: C1, VX: <null>, VY: <null> }
     8) { IDX: B16, IDY: C2, VX: <null>, VY: <null> }
     9) { IDX: B17, IDY: C0, VX: <null>, VY: <null> }
    10) { IDX: B17, IDY: C1, VX: <null>, VY: <null> }
    11) { IDX: B17, IDY: C2, VX: <null>, VY: <null> }
    12) { IDX: B36, IDY: C0, VX: <null>, VY: <null> }
    13) { IDX: B36, IDY: C1, VX: <null>, VY: <null> }
    14) { IDX: B36, IDY: C2, VX: <null>, VY: <null> }
    15) { IDX: B37, IDY: C0, VX: <null>, VY: <null> }
    16) { IDX: B37, IDY: C1, VX: <null>, VY: <null> }
    17) { IDX: B37, IDY: C2, VX: <null>, VY: <null> }
 9) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B22, IDY: D0, VX: 11, VY: 11 }
     1) { IDX: B23, IDY: D0, VX: 11, VY: 11 }
     2) { IDX: B24, IDY: D1, VX: 12, VY: 12 }
     3) { IDX: B25, IDY: D1, VX: 12, VY: 12 }
10) Sequence: Seq<{str,str,i8,i8}>
11) <null>
12) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: A3, VX: <null>, VY: <null> }
     1) { IDX: C0, IDY: A10, VX: <null>, VY: <null> }
     2) { IDX: C1, IDY: A3, VX: <null>, VY: <null> }
     3) { IDX: C1, IDY: A10, VX: <null>, VY: <null> }
     4) { IDX: C2, IDY: A3, VX: <null>, VY: <null> }
     5) { IDX: C2, IDY: A10, VX: <null>, VY: <null> }
13) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: B6, VX: <null>, VY: <null> }
     1) { IDX: C0, IDY: B7, VX: <null>, VY: <null> }
     2) { IDX: C0, IDY: B16, VX: <null>, VY: <null> }
     3) { IDX: C0, IDY: B17, VX: <null>, VY: <null> }
     4) { IDX: C0, IDY: B36, VX: <null>, VY: <null> }
     5) { IDX: C0, IDY: B37, VX: <null>, VY: <null> }
     6) { IDX: C1, IDY: B6, VX: <null>, VY: <null> }
     7) { IDX: C1, IDY: B7, VX: <null>, VY: <null> }
     8) { IDX: C1, IDY: B16, VX: <null>, VY: <null> }
     9) { IDX: C1, IDY: B17, VX: <null>, VY: <null> }
    10) { IDX: C1, IDY: B36, VX: <null>, VY: <null> }
    11) { IDX: C1, IDY: B37, VX: <null>, VY: <null> }
    12) { IDX: C2, IDY: B6, VX: <null>, VY: <null> }
    13) { IDX: C2, IDY: B7, VX: <null>, VY: <null> }
    14) { IDX: C2, IDY: B16, VX: <null>, VY: <null> }
    15) { IDX: C2, IDY: B17, VX: <null>, VY: <null> }
    16) { IDX: C2, IDY: B36, VX: <null>, VY: <null> }
    17) { IDX: C2, IDY: B37, VX: <null>, VY: <null> }
14) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: C0, VX: <null>, VY: <null> }
     1) { IDX: C0, IDY: C1, VX: <null>, VY: <null> }
     2) { IDX: C0, IDY: C2, VX: <null>, VY: <null> }
     3) { IDX: C1, IDY: C0, VX: <null>, VY: <null> }
     4) { IDX: C1, IDY: C1, VX: <null>, VY: <null> }
     5) { IDX: C1, IDY: C2, VX: <null>, VY: <null> }
     6) { IDX: C2, IDY: C0, VX: <null>, VY: <null> }
     7) { IDX: C2, IDY: C1, VX: <null>, VY: <null> }
     8) { IDX: C2, IDY: C2, VX: <null>, VY: <null> }
15) Sequence: Seq<{str,str,i8,i8}>
16) Sequence: Seq<{str,str,i8,i8}>
17) <null>
18) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D1, IDY: A12, VX: 12, VY: 12 }
     1) { IDX: D2, IDY: A13, VX: 13, VY: 13 }
19) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: B22, VX: 11, VY: 11 }
     1) { IDX: D0, IDY: B23, VX: 11, VY: 11 }
     2) { IDX: D1, IDY: B24, VX: 12, VY: 12 }
     3) { IDX: D1, IDY: B25, VX: 12, VY: 12 }
20) Sequence: Seq<{str,str,i8,i8}>
21) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: D0, VX: 11, VY: 11 }
     1) { IDX: D1, IDY: D1, VX: 12, VY: 12 }
     2) { IDX: D2, IDY: D2, VX: 13, VY: 13 }
22) Sequence: Seq<{str,str,i8,i8}>
23) <null>
24) Sequence: Seq<{str,str,i8,i8}>
25) Sequence: Seq<{str,str,i8,i8}>
26) Sequence: Seq<{str,str,i8,i8}>
27) Sequence: Seq<{str,str,i8,i8}>
28) Sequence: Seq<{str,str,i8,i8}>
29) <null>
30) <null>
31) <null>
32) <null>
33) <null>
34) <null>
35) <null>
*** Ctx ping count: 3074
    [0:2](3025=275+2750): CrossJoin(*3: *1x, *4: *2x, Test.Wrap(*3.V @= *4.V), {IDX:*3.ID, IDY:*4.ID, VX:*3.V, VY:*4.V})
    [2:4](49=7+42): CrossJoin(*1: XS, *2: YS, true, CrossJoin(*3: *1, *4: *2, Test.Wrap(*3.V @= *4.V), {IDX:*3.ID, IDY:*4.ID, VX:*3.V, VY:*4.V}))
###
> CrossJoin(X:XS, Y:YS, true, CrossJoin(x:X, y:Y,      x.V  = y.V , { IDX:x.ID, IDY:y.ID, VX:x.V, VY:y.V }))
CrossJoin(X : XS, Y : YS, true, CrossJoin(x : X, y : Y, x.V @= y.V, { IDX : x.ID, IDY : y.ID, VX : x.V, VY : y.V })) : {IDX:s, IDY:s, VX:i8?, VY:i8?}**
BndKind:Call, Type:{IDX:s, IDY:s, VX:i8?, VY:i8?}**, Bnd:(Call(∂.CrossJoin([map:1] Global(XS), [map:2] Global(YS), true:b, Call(∂.KeyJoin([map:3] Scope(1), [map:4] Scope(2), [=] GetField(Scope(3), V), GetField(Scope(4), V), {IDX:GetField(Scope(3), ID), IDY:GetField(Scope(4), ID), VX:GetField(Scope(3), V), VY:GetField(Scope(4), V)})))))
// (<ctx>, ∂.XS:{ID:s, V:i8?}**, ∂.YS:{ID:s, V:i8?}**) : {IDX:s, IDY:s, VX:i8?, VY:i8?}**
CrossJoin_2(Arr<obj>, Seq<{str,i8}>, Seq<{str,i8}>):bool
      1) ldc.i4.1
      1) ret
  Total Size: 2

KeyJoin_2(Arr<obj>, {str,i8}):Opt<i8>
      1) ldarg.1 [{str,i8}]
      1) dup
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      5) ldfld {str,i8}::_F1:i8
      5) newobj Opt<i8>(i8)
      5) br [1]
  Label [0]:
      1) pop
      5) call static CodeGenUtil::GetDefault():Opt<i8>
  Label [1]:
      1) ret
  Total Size: 36

KeyJoin_3(Arr<obj>, {str,i8}):Opt<i8>
      1) ldarg.1 [{str,i8}]
      1) dup
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      5) ldfld {str,i8}::_F1:i8
      5) newobj Opt<i8>(i8)
      5) br [1]
  Label [0]:
      1) pop
      5) call static CodeGenUtil::GetDefault():Opt<i8>
  Label [1]:
      1) ret
  Total Size: 36

KeyJoin_4(Arr<obj>, {str,i8}, {str,i8}):{str,str,i8,i8}
      5) newobj {str,str,i8,i8}()
      1) dup
      1) ldc.i4.3
      5) stfld {str,str,i8,i8}::_B0:u1
      1) stloc.0 [{str,str,i8,i8}]
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F0:str
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F1:str
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.4
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F1:i8
      5) stfld {str,str,i8,i8}::_F2:i8
  Label [0]:
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [1]
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.8
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F1:i8
      5) stfld {str,str,i8,i8}::_F3:i8
  Label [1]:
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 130

CrossJoin_3(Arr<obj>, Seq<{str,i8}>, Seq<{str,i8}>):Seq<{str,str,i8,i8}>
      1) ldarg.1 [Seq<{str,i8}>]
      1) ldarg.2 [Seq<{str,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<{str,i8},Opt<i8>>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [Func<{str,i8},Opt<i8>>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Func<{str,i8},{str,i8},{str,str,i8,i8}>]
      1) ldnull
      1) ldnull
      1) ldnull
      1) ldc.i4.0
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [ExecCtx]
      1) ldc.i4.0
      5) call static KeyJoinGen::Exec(Seq<{str,i8}>, Seq<{str,i8}>, Func<{str,i8},Opt<i8>>, Func<{str,i8},Opt<i8>>, Func<{str,i8},{str,i8},{str,str,i8,i8}>, Func<{str,i8},{str,str,i8,i8}>, Func<{str,i8},{str,str,i8,i8}>, EqualityComparer<Opt<i8>>, bool, ExecCtx, i4):Seq<{str,str,i8,i8}>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<{str,str,i8,i8}>):Seq<{str,str,i8,i8}>
      1) ret
  Total Size: 64

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):ExecCtx
      1) stloc.0 [ExecCtx]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<Seq<{str,i8}>>
      1) stloc.1 [Seq<Seq<{str,i8}>>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.2
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<Seq<{str,i8}>>
      1) stloc.2 [Seq<Seq<{str,i8}>>]
      1) ldloc.1 [Seq<Seq<{str,i8}>>]
      1) ldloc.2 [Seq<Seq<{str,i8}>>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<Seq<{str,i8}>,Seq<{str,i8}>,bool>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [MethodInfo]
      5) ldtoken [Func<Seq<{str,i8}>,Seq<{str,i8}>,Seq<{str,str,i8,i8}>>]
      5) call static Type::GetTypeFromHandle(RuntimeTypeHandle):Type
      1) ldc.i4.2
      5) newarr [obj]
      1) dup
      1) ldc.i4.0
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Arr<obj>]
      5) stelem [Arr<obj>]
      1) dup
      1) ldc.i4.1
      1) ldloc.0 [ExecCtx]
      5) stelem [ExecCtx]
      5) callvirt DynamicMethod::CreateDelegate(Type, obj):Delegate
      1) ldloc.0 [ExecCtx]
      1) ldc.i4.3
      5) call static CrossJoinGen::Exec(Seq<Seq<{str,i8}>>, Seq<Seq<{str,i8}>>, Func<Seq<{str,i8}>,Seq<{str,i8}>,bool>, Func<Seq<{str,i8}>,Seq<{str,i8}>,Seq<{str,str,i8,i8}>>, ExecCtx, i4):Seq<Seq<{str,str,i8,i8}>>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<Seq<{str,str,i8,i8}>>):Seq<Seq<{str,str,i8,i8}>>
      1) ret
  Total Size: 99

Func sig: (<ctx>:x, XS:{ID:s, V:i8?}**, YS:{ID:s, V:i8?}**) to {IDX:s, IDY:s, VX:i8?, VY:i8?}**
Sequence: Seq<Seq<{str,str,i8,i8}>>
 0) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: A0, VX: 0, VY: 0 }
     1) { IDX: A1, IDY: A1, VX: 1, VY: 1 }
     2) { IDX: A3, IDY: A3, VX: <null>, VY: <null> }
     3) { IDX: A3, IDY: A10, VX: <null>, VY: <null> }
     4) { IDX: A4, IDY: A4, VX: 4, VY: 4 }
     5) { IDX: A6, IDY: A6, VX: 6, VY: 6 }
     6) { IDX: A7, IDY: A7, VX: 7, VY: 7 }
     7) { IDX: A9, IDY: A9, VX: 9, VY: 9 }
     8) { IDX: A10, IDY: A3, VX: <null>, VY: <null> }
     9) { IDX: A10, IDY: A10, VX: <null>, VY: <null> }
    10) { IDX: A12, IDY: A12, VX: 12, VY: 12 }
    11) { IDX: A13, IDY: A13, VX: 13, VY: 13 }
    12) { IDX: A15, IDY: A15, VX: 15, VY: 15 }
    13) { IDX: A16, IDY: A16, VX: 16, VY: 16 }
    14) { IDX: A18, IDY: A18, VX: 18, VY: 18 }
    15) { IDX: A19, IDY: A19, VX: 19, VY: 19 }
 1) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: B0, VX: 0, VY: 0 }
     1) { IDX: A0, IDY: B1, VX: 0, VY: 0 }
     2) { IDX: A3, IDY: B6, VX: <null>, VY: <null> }
     3) { IDX: A3, IDY: B7, VX: <null>, VY: <null> }
     4) { IDX: A3, IDY: B16, VX: <null>, VY: <null> }
     5) { IDX: A3, IDY: B17, VX: <null>, VY: <null> }
     6) { IDX: A3, IDY: B36, VX: <null>, VY: <null> }
     7) { IDX: A3, IDY: B37, VX: <null>, VY: <null> }
     8) { IDX: A4, IDY: B8, VX: 4, VY: 4 }
     9) { IDX: A4, IDY: B9, VX: 4, VY: 4 }
    10) { IDX: A6, IDY: B12, VX: 6, VY: 6 }
    11) { IDX: A6, IDY: B13, VX: 6, VY: 6 }
    12) { IDX: A7, IDY: B14, VX: 7, VY: 7 }
    13) { IDX: A7, IDY: B15, VX: 7, VY: 7 }
    14) { IDX: A10, IDY: B6, VX: <null>, VY: <null> }
    15) { IDX: A10, IDY: B7, VX: <null>, VY: <null> }
    16) { IDX: A10, IDY: B16, VX: <null>, VY: <null> }
    17) { IDX: A10, IDY: B17, VX: <null>, VY: <null> }
    18) { IDX: A10, IDY: B36, VX: <null>, VY: <null> }
    19) { IDX: A10, IDY: B37, VX: <null>, VY: <null> }
    20) { IDX: A12, IDY: B24, VX: 12, VY: 12 }
    21) { IDX: A12, IDY: B25, VX: 12, VY: 12 }
    22) { IDX: A15, IDY: B30, VX: 15, VY: 15 }
    23) { IDX: A15, IDY: B31, VX: 15, VY: 15 }
    24) { IDX: A16, IDY: B32, VX: 16, VY: 16 }
    25) { IDX: A16, IDY: B33, VX: 16, VY: 16 }
    26) { IDX: A19, IDY: B38, VX: 19, VY: 19 }
    27) { IDX: A19, IDY: B39, VX: 19, VY: 19 }
 2) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A3, IDY: C0, VX: <null>, VY: <null> }
     1) { IDX: A3, IDY: C1, VX: <null>, VY: <null> }
     2) { IDX: A3, IDY: C2, VX: <null>, VY: <null> }
     3) { IDX: A10, IDY: C0, VX: <null>, VY: <null> }
     4) { IDX: A10, IDY: C1, VX: <null>, VY: <null> }
     5) { IDX: A10, IDY: C2, VX: <null>, VY: <null> }
 3) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A12, IDY: D1, VX: 12, VY: 12 }
     1) { IDX: A13, IDY: D2, VX: 13, VY: 13 }
 4) Sequence: Seq<{str,str,i8,i8}>
 5) <null>
 6) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: A0, VX: 0, VY: 0 }
     1) { IDX: B1, IDY: A0, VX: 0, VY: 0 }
     2) { IDX: B6, IDY: A3, VX: <null>, VY: <null> }
     3) { IDX: B6, IDY: A10, VX: <null>, VY: <null> }
     4) { IDX: B7, IDY: A3, VX: <null>, VY: <null> }
     5) { IDX: B7, IDY: A10, VX: <null>, VY: <null> }
     6) { IDX: B8, IDY: A4, VX: 4, VY: 4 }
     7) { IDX: B9, IDY: A4, VX: 4, VY: 4 }
     8) { IDX: B12, IDY: A6, VX: 6, VY: 6 }
     9) { IDX: B13, IDY: A6, VX: 6, VY: 6 }
    10) { IDX: B14, IDY: A7, VX: 7, VY: 7 }
    11) { IDX: B15, IDY: A7, VX: 7, VY: 7 }
    12) { IDX: B16, IDY: A3, VX: <null>, VY: <null> }
    13) { IDX: B16, IDY: A10, VX: <null>, VY: <null> }
    14) { IDX: B17, IDY: A3, VX: <null>, VY: <null> }
    15) { IDX: B17, IDY: A10, VX: <null>, VY: <null> }
    16) { IDX: B24, IDY: A12, VX: 12, VY: 12 }
    17) { IDX: B25, IDY: A12, VX: 12, VY: 12 }
    18) { IDX: B30, IDY: A15, VX: 15, VY: 15 }
    19) { IDX: B31, IDY: A15, VX: 15, VY: 15 }
    20) { IDX: B32, IDY: A16, VX: 16, VY: 16 }
    21) { IDX: B33, IDY: A16, VX: 16, VY: 16 }
    22) { IDX: B36, IDY: A3, VX: <null>, VY: <null> }
    23) { IDX: B36, IDY: A10, VX: <null>, VY: <null> }
    24) { IDX: B37, IDY: A3, VX: <null>, VY: <null> }
    25) { IDX: B37, IDY: A10, VX: <null>, VY: <null> }
    26) { IDX: B38, IDY: A19, VX: 19, VY: 19 }
    27) { IDX: B39, IDY: A19, VX: 19, VY: 19 }
 7) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: B0, VX: 0, VY: 0 }
     1) { IDX: B0, IDY: B1, VX: 0, VY: 0 }
     2) { IDX: B1, IDY: B0, VX: 0, VY: 0 }
     3) { IDX: B1, IDY: B1, VX: 0, VY: 0 }
     4) { IDX: B4, IDY: B4, VX: 2, VY: 2 }
     5) { IDX: B4, IDY: B5, VX: 2, VY: 2 }
     6) { IDX: B5, IDY: B4, VX: 2, VY: 2 }
     7) { IDX: B5, IDY: B5, VX: 2, VY: 2 }
     8) { IDX: B6, IDY: B6, VX: <null>, VY: <null> }
     9) { IDX: B6, IDY: B7, VX: <null>, VY: <null> }
    10) { IDX: B6, IDY: B16, VX: <null>, VY: <null> }
    11) { IDX: B6, IDY: B17, VX: <null>, VY: <null> }
    12) { IDX: B6, IDY: B36, VX: <null>, VY: <null> }
    13) { IDX: B6, IDY: B37, VX: <null>, VY: <null> }
    14) { IDX: B7, IDY: B6, VX: <null>, VY: <null> }
    15) { IDX: B7, IDY: B7, VX: <null>, VY: <null> }
    16) { IDX: B7, IDY: B16, VX: <null>, VY: <null> }
    17) { IDX: B7, IDY: B17, VX: <null>, VY: <null> }
    18) { IDX: B7, IDY: B36, VX: <null>, VY: <null> }
    19) { IDX: B7, IDY: B37, VX: <null>, VY: <null> }
    20) { IDX: B8, IDY: B8, VX: 4, VY: 4 }
    21) { IDX: B8, IDY: B9, VX: 4, VY: 4 }
    22) { IDX: B9, IDY: B8, VX: 4, VY: 4 }
    23) { IDX: B9, IDY: B9, VX: 4, VY: 4 }
    24) { IDX: B12, IDY: B12, VX: 6, VY: 6 }
    25) { IDX: B12, IDY: B13, VX: 6, VY: 6 }
    26) { IDX: B13, IDY: B12, VX: 6, VY: 6 }
    27) { IDX: B13, IDY: B13, VX: 6, VY: 6 }
    28) { IDX: B14, IDY: B14, VX: 7, VY: 7 }
    29) { IDX: B14, IDY: B15, VX: 7, VY: 7 }
    30) { IDX: B15, IDY: B14, VX: 7, VY: 7 }
    31) { IDX: B15, IDY: B15, VX: 7, VY: 7 }
    32) { IDX: B16, IDY: B6, VX: <null>, VY: <null> }
    33) { IDX: B16, IDY: B7, VX: <null>, VY: <null> }
    34) { IDX: B16, IDY: B16, VX: <null>, VY: <null> }
    35) { IDX: B16, IDY: B17, VX: <null>, VY: <null> }
    36) { IDX: B16, IDY: B36, VX: <null>, VY: <null> }
    37) { IDX: B16, IDY: B37, VX: <null>, VY: <null> }
    38) { IDX: B17, IDY: B6, VX: <null>, VY: <null> }
    39) { IDX: B17, IDY: B7, VX: <null>, VY: <null> }
    40) { IDX: B17, IDY: B16, VX: <null>, VY: <null> }
    41) { IDX: B17, IDY: B17, VX: <null>, VY: <null> }
    42) { IDX: B17, IDY: B36, VX: <null>, VY: <null> }
    43) { IDX: B17, IDY: B37, VX: <null>, VY: <null> }
    44) { IDX: B20, IDY: B20, VX: 10, VY: 10 }
    45) { IDX: B20, IDY: B21, VX: 10, VY: 10 }
    46) { IDX: B21, IDY: B20, VX: 10, VY: 10 }
    47) { IDX: B21, IDY: B21, VX: 10, VY: 10 }
    48) { IDX: B22, IDY: B22, VX: 11, VY: 11 }
    49) { IDX: B22, IDY: B23, VX: 11, VY: 11 }
    50) { IDX: B23, IDY: B22, VX: 11, VY: 11 }
    51) { IDX: B23, IDY: B23, VX: 11, VY: 11 }
    52) { IDX: B24, IDY: B24, VX: 12, VY: 12 }
    53) { IDX: B24, IDY: B25, VX: 12, VY: 12 }
    54) { IDX: B25, IDY: B24, VX: 12, VY: 12 }
    55) { IDX: B25, IDY: B25, VX: 12, VY: 12 }
    56) { IDX: B28, IDY: B28, VX: 14, VY: 14 }
    57) { IDX: B28, IDY: B29, VX: 14, VY: 14 }
    58) { IDX: B29, IDY: B28, VX: 14, VY: 14 }
    59) { IDX: B29, IDY: B29, VX: 14, VY: 14 }
    60) { IDX: B30, IDY: B30, VX: 15, VY: 15 }
    61) { IDX: B30, IDY: B31, VX: 15, VY: 15 }
    62) { IDX: B31, IDY: B30, VX: 15, VY: 15 }
    63) { IDX: B31, IDY: B31, VX: 15, VY: 15 }
    64) { IDX: B32, IDY: B32, VX: 16, VY: 16 }
    65) { IDX: B32, IDY: B33, VX: 16, VY: 16 }
    66) { IDX: B33, IDY: B32, VX: 16, VY: 16 }
    67) { IDX: B33, IDY: B33, VX: 16, VY: 16 }
    68) { IDX: B36, IDY: B6, VX: <null>, VY: <null> }
    69) { IDX: B36, IDY: B7, VX: <null>, VY: <null> }
    70) { IDX: B36, IDY: B16, VX: <null>, VY: <null> }
    71) { IDX: B36, IDY: B17, VX: <null>, VY: <null> }
    72) { IDX: B36, IDY: B36, VX: <null>, VY: <null> }
    73) { IDX: B36, IDY: B37, VX: <null>, VY: <null> }
    74) { IDX: B37, IDY: B6, VX: <null>, VY: <null> }
    75) { IDX: B37, IDY: B7, VX: <null>, VY: <null> }
    76) { IDX: B37, IDY: B16, VX: <null>, VY: <null> }
    77) { IDX: B37, IDY: B17, VX: <null>, VY: <null> }
    78) { IDX: B37, IDY: B36, VX: <null>, VY: <null> }
    79) { IDX: B37, IDY: B37, VX: <null>, VY: <null> }
    80) { IDX: B38, IDY: B38, VX: 19, VY: 19 }
    81) { IDX: B38, IDY: B39, VX: 19, VY: 19 }
    82) { IDX: B39, IDY: B38, VX: 19, VY: 19 }
    83) { IDX: B39, IDY: B39, VX: 19, VY: 19 }
 8) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B6, IDY: C0, VX: <null>, VY: <null> }
     1) { IDX: B6, IDY: C1, VX: <null>, VY: <null> }
     2) { IDX: B6, IDY: C2, VX: <null>, VY: <null> }
     3) { IDX: B7, IDY: C0, VX: <null>, VY: <null> }
     4) { IDX: B7, IDY: C1, VX: <null>, VY: <null> }
     5) { IDX: B7, IDY: C2, VX: <null>, VY: <null> }
     6) { IDX: B16, IDY: C0, VX: <null>, VY: <null> }
     7) { IDX: B16, IDY: C1, VX: <null>, VY: <null> }
     8) { IDX: B16, IDY: C2, VX: <null>, VY: <null> }
     9) { IDX: B17, IDY: C0, VX: <null>, VY: <null> }
    10) { IDX: B17, IDY: C1, VX: <null>, VY: <null> }
    11) { IDX: B17, IDY: C2, VX: <null>, VY: <null> }
    12) { IDX: B36, IDY: C0, VX: <null>, VY: <null> }
    13) { IDX: B36, IDY: C1, VX: <null>, VY: <null> }
    14) { IDX: B36, IDY: C2, VX: <null>, VY: <null> }
    15) { IDX: B37, IDY: C0, VX: <null>, VY: <null> }
    16) { IDX: B37, IDY: C1, VX: <null>, VY: <null> }
    17) { IDX: B37, IDY: C2, VX: <null>, VY: <null> }
 9) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B22, IDY: D0, VX: 11, VY: 11 }
     1) { IDX: B23, IDY: D0, VX: 11, VY: 11 }
     2) { IDX: B24, IDY: D1, VX: 12, VY: 12 }
     3) { IDX: B25, IDY: D1, VX: 12, VY: 12 }
10) Sequence: Seq<{str,str,i8,i8}>
11) <null>
12) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: A3, VX: <null>, VY: <null> }
     1) { IDX: C0, IDY: A10, VX: <null>, VY: <null> }
     2) { IDX: C1, IDY: A3, VX: <null>, VY: <null> }
     3) { IDX: C1, IDY: A10, VX: <null>, VY: <null> }
     4) { IDX: C2, IDY: A3, VX: <null>, VY: <null> }
     5) { IDX: C2, IDY: A10, VX: <null>, VY: <null> }
13) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: B6, VX: <null>, VY: <null> }
     1) { IDX: C0, IDY: B7, VX: <null>, VY: <null> }
     2) { IDX: C0, IDY: B16, VX: <null>, VY: <null> }
     3) { IDX: C0, IDY: B17, VX: <null>, VY: <null> }
     4) { IDX: C0, IDY: B36, VX: <null>, VY: <null> }
     5) { IDX: C0, IDY: B37, VX: <null>, VY: <null> }
     6) { IDX: C1, IDY: B6, VX: <null>, VY: <null> }
     7) { IDX: C1, IDY: B7, VX: <null>, VY: <null> }
     8) { IDX: C1, IDY: B16, VX: <null>, VY: <null> }
     9) { IDX: C1, IDY: B17, VX: <null>, VY: <null> }
    10) { IDX: C1, IDY: B36, VX: <null>, VY: <null> }
    11) { IDX: C1, IDY: B37, VX: <null>, VY: <null> }
    12) { IDX: C2, IDY: B6, VX: <null>, VY: <null> }
    13) { IDX: C2, IDY: B7, VX: <null>, VY: <null> }
    14) { IDX: C2, IDY: B16, VX: <null>, VY: <null> }
    15) { IDX: C2, IDY: B17, VX: <null>, VY: <null> }
    16) { IDX: C2, IDY: B36, VX: <null>, VY: <null> }
    17) { IDX: C2, IDY: B37, VX: <null>, VY: <null> }
14) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: C0, VX: <null>, VY: <null> }
     1) { IDX: C0, IDY: C1, VX: <null>, VY: <null> }
     2) { IDX: C0, IDY: C2, VX: <null>, VY: <null> }
     3) { IDX: C1, IDY: C0, VX: <null>, VY: <null> }
     4) { IDX: C1, IDY: C1, VX: <null>, VY: <null> }
     5) { IDX: C1, IDY: C2, VX: <null>, VY: <null> }
     6) { IDX: C2, IDY: C0, VX: <null>, VY: <null> }
     7) { IDX: C2, IDY: C1, VX: <null>, VY: <null> }
     8) { IDX: C2, IDY: C2, VX: <null>, VY: <null> }
15) Sequence: Seq<{str,str,i8,i8}>
16) Sequence: Seq<{str,str,i8,i8}>
17) <null>
18) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D1, IDY: A12, VX: 12, VY: 12 }
     1) { IDX: D2, IDY: A13, VX: 13, VY: 13 }
19) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: B22, VX: 11, VY: 11 }
     1) { IDX: D0, IDY: B23, VX: 11, VY: 11 }
     2) { IDX: D1, IDY: B24, VX: 12, VY: 12 }
     3) { IDX: D1, IDY: B25, VX: 12, VY: 12 }
20) Sequence: Seq<{str,str,i8,i8}>
21) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: D0, VX: 11, VY: 11 }
     1) { IDX: D1, IDY: D1, VX: 12, VY: 12 }
     2) { IDX: D2, IDY: D2, VX: 13, VY: 13 }
22) Sequence: Seq<{str,str,i8,i8}>
23) <null>
24) Sequence: Seq<{str,str,i8,i8}>
25) Sequence: Seq<{str,str,i8,i8}>
26) Sequence: Seq<{str,str,i8,i8}>
27) Sequence: Seq<{str,str,i8,i8}>
28) Sequence: Seq<{str,str,i8,i8}>
29) <null>
30) <null>
31) <null>
32) <null>
33) <null>
34) <null>
35) <null>
*** Ctx ping count: 373
    [0:3](324=144+0+180): KeyJoin(*3: *1x, *4: *2x, [=] *3.V, *4.V, {IDX:*3.ID, IDY:*4.ID, VX:*3.V, VY:*4.V})
    [3:5](49=7+42): CrossJoin(*1: XS, *2: YS, true, KeyJoin(*3: *1, *4: *2, [=] *3.V, *4.V, {IDX:*3.ID, IDY:*4.ID, VX:*3.V, VY:*4.V}))
###
> CrossJoin(X:XS, Y:YS, true, CrossJoin(x:X, y:Y,      x.V $= y.V , { IDX:x.ID, IDY:y.ID, VX:x.V, VY:y.V }))
CrossJoin(X : XS, Y : YS, true, CrossJoin(x : X, y : Y, x.V $= y.V, { IDX : x.ID, IDY : y.ID, VX : x.V, VY : y.V })) : {IDX:s, IDY:s, VX:i8?, VY:i8?}**
BndKind:Call, Type:{IDX:s, IDY:s, VX:i8?, VY:i8?}**, Bnd:(Call(∂.CrossJoin([map:1] Global(XS), [map:2] Global(YS), true:b, Call(∂.KeyJoin([map:3] Scope(1), [map:4] Scope(2), GetField(Scope(3), V), GetField(Scope(4), V), {IDX:GetField(Scope(3), ID), IDY:GetField(Scope(4), ID), VX:GetField(Scope(3), V), VY:GetField(Scope(4), V)})))))
// (<ctx>, ∂.XS:{ID:s, V:i8?}**, ∂.YS:{ID:s, V:i8?}**) : {IDX:s, IDY:s, VX:i8?, VY:i8?}**
CrossJoin_2(Arr<obj>, Seq<{str,i8}>, Seq<{str,i8}>):bool
      1) ldc.i4.1
      1) ret
  Total Size: 2

KeyJoin_2(Arr<obj>, {str,i8}):Opt<i8>
      1) ldarg.1 [{str,i8}]
      1) dup
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      5) ldfld {str,i8}::_F1:i8
      5) newobj Opt<i8>(i8)
      5) br [1]
  Label [0]:
      1) pop
      5) call static CodeGenUtil::GetDefault():Opt<i8>
  Label [1]:
      1) ret
  Total Size: 36

KeyJoin_3(Arr<obj>, {str,i8}):Opt<i8>
      1) ldarg.1 [{str,i8}]
      1) dup
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      5) ldfld {str,i8}::_F1:i8
      5) newobj Opt<i8>(i8)
      5) br [1]
  Label [0]:
      1) pop
      5) call static CodeGenUtil::GetDefault():Opt<i8>
  Label [1]:
      1) ret
  Total Size: 36

KeyJoin_4(Arr<obj>, {str,i8}, {str,i8}):{str,str,i8,i8}
      5) newobj {str,str,i8,i8}()
      1) dup
      1) ldc.i4.3
      5) stfld {str,str,i8,i8}::_B0:u1
      1) stloc.0 [{str,str,i8,i8}]
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F0:str
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F1:str
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.4
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F1:i8
      5) stfld {str,str,i8,i8}::_F2:i8
  Label [0]:
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [1]
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.8
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F1:i8
      5) stfld {str,str,i8,i8}::_F3:i8
  Label [1]:
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 130

CrossJoin_3(Arr<obj>, Seq<{str,i8}>, Seq<{str,i8}>):Seq<{str,str,i8,i8}>
      1) ldarg.1 [Seq<{str,i8}>]
      1) ldarg.2 [Seq<{str,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<{str,i8},Opt<i8>>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [Func<{str,i8},Opt<i8>>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Func<{str,i8},{str,i8},{str,str,i8,i8}>]
      1) ldnull
      1) ldnull
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.3
      5) ldelem [EqualityComparer<Opt<i8>>]
      1) ldc.i4.1
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [ExecCtx]
      1) ldc.i4.0
      5) call static KeyJoinGen::Exec(Seq<{str,i8}>, Seq<{str,i8}>, Func<{str,i8},Opt<i8>>, Func<{str,i8},Opt<i8>>, Func<{str,i8},{str,i8},{str,str,i8,i8}>, Func<{str,i8},{str,str,i8,i8}>, Func<{str,i8},{str,str,i8,i8}>, EqualityComparer<Opt<i8>>, bool, ExecCtx, i4):Seq<{str,str,i8,i8}>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<{str,str,i8,i8}>):Seq<{str,str,i8,i8}>
      1) ret
  Total Size: 76

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):ExecCtx
      1) stloc.0 [ExecCtx]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<Seq<{str,i8}>>
      1) stloc.1 [Seq<Seq<{str,i8}>>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.2
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<Seq<{str,i8}>>
      1) stloc.2 [Seq<Seq<{str,i8}>>]
      1) ldloc.1 [Seq<Seq<{str,i8}>>]
      1) ldloc.2 [Seq<Seq<{str,i8}>>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<Seq<{str,i8}>,Seq<{str,i8}>,bool>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [MethodInfo]
      5) ldtoken [Func<Seq<{str,i8}>,Seq<{str,i8}>,Seq<{str,str,i8,i8}>>]
      5) call static Type::GetTypeFromHandle(RuntimeTypeHandle):Type
      1) ldc.i4.2
      5) newarr [obj]
      1) dup
      1) ldc.i4.0
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Arr<obj>]
      5) stelem [Arr<obj>]
      1) dup
      1) ldc.i4.1
      1) ldloc.0 [ExecCtx]
      5) stelem [ExecCtx]
      5) callvirt DynamicMethod::CreateDelegate(Type, obj):Delegate
      1) ldloc.0 [ExecCtx]
      1) ldc.i4.3
      5) call static CrossJoinGen::Exec(Seq<Seq<{str,i8}>>, Seq<Seq<{str,i8}>>, Func<Seq<{str,i8}>,Seq<{str,i8}>,bool>, Func<Seq<{str,i8}>,Seq<{str,i8}>,Seq<{str,str,i8,i8}>>, ExecCtx, i4):Seq<Seq<{str,str,i8,i8}>>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<Seq<{str,str,i8,i8}>>):Seq<Seq<{str,str,i8,i8}>>
      1) ret
  Total Size: 99

Func sig: (<ctx>:x, XS:{ID:s, V:i8?}**, YS:{ID:s, V:i8?}**) to {IDX:s, IDY:s, VX:i8?, VY:i8?}**
Sequence: Seq<Seq<{str,str,i8,i8}>>
 0) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: A0, VX: 0, VY: 0 }
     1) { IDX: A1, IDY: A1, VX: 1, VY: 1 }
     2) { IDX: A4, IDY: A4, VX: 4, VY: 4 }
     3) { IDX: A6, IDY: A6, VX: 6, VY: 6 }
     4) { IDX: A7, IDY: A7, VX: 7, VY: 7 }
     5) { IDX: A9, IDY: A9, VX: 9, VY: 9 }
     6) { IDX: A12, IDY: A12, VX: 12, VY: 12 }
     7) { IDX: A13, IDY: A13, VX: 13, VY: 13 }
     8) { IDX: A15, IDY: A15, VX: 15, VY: 15 }
     9) { IDX: A16, IDY: A16, VX: 16, VY: 16 }
    10) { IDX: A18, IDY: A18, VX: 18, VY: 18 }
    11) { IDX: A19, IDY: A19, VX: 19, VY: 19 }
 1) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: B0, VX: 0, VY: 0 }
     1) { IDX: A0, IDY: B1, VX: 0, VY: 0 }
     2) { IDX: A4, IDY: B8, VX: 4, VY: 4 }
     3) { IDX: A4, IDY: B9, VX: 4, VY: 4 }
     4) { IDX: A6, IDY: B12, VX: 6, VY: 6 }
     5) { IDX: A6, IDY: B13, VX: 6, VY: 6 }
     6) { IDX: A7, IDY: B14, VX: 7, VY: 7 }
     7) { IDX: A7, IDY: B15, VX: 7, VY: 7 }
     8) { IDX: A12, IDY: B24, VX: 12, VY: 12 }
     9) { IDX: A12, IDY: B25, VX: 12, VY: 12 }
    10) { IDX: A15, IDY: B30, VX: 15, VY: 15 }
    11) { IDX: A15, IDY: B31, VX: 15, VY: 15 }
    12) { IDX: A16, IDY: B32, VX: 16, VY: 16 }
    13) { IDX: A16, IDY: B33, VX: 16, VY: 16 }
    14) { IDX: A19, IDY: B38, VX: 19, VY: 19 }
    15) { IDX: A19, IDY: B39, VX: 19, VY: 19 }
 2) Sequence: Seq<{str,str,i8,i8}>
 3) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A12, IDY: D1, VX: 12, VY: 12 }
     1) { IDX: A13, IDY: D2, VX: 13, VY: 13 }
 4) Sequence: Seq<{str,str,i8,i8}>
 5) <null>
 6) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: A0, VX: 0, VY: 0 }
     1) { IDX: B1, IDY: A0, VX: 0, VY: 0 }
     2) { IDX: B8, IDY: A4, VX: 4, VY: 4 }
     3) { IDX: B9, IDY: A4, VX: 4, VY: 4 }
     4) { IDX: B12, IDY: A6, VX: 6, VY: 6 }
     5) { IDX: B13, IDY: A6, VX: 6, VY: 6 }
     6) { IDX: B14, IDY: A7, VX: 7, VY: 7 }
     7) { IDX: B15, IDY: A7, VX: 7, VY: 7 }
     8) { IDX: B24, IDY: A12, VX: 12, VY: 12 }
     9) { IDX: B25, IDY: A12, VX: 12, VY: 12 }
    10) { IDX: B30, IDY: A15, VX: 15, VY: 15 }
    11) { IDX: B31, IDY: A15, VX: 15, VY: 15 }
    12) { IDX: B32, IDY: A16, VX: 16, VY: 16 }
    13) { IDX: B33, IDY: A16, VX: 16, VY: 16 }
    14) { IDX: B38, IDY: A19, VX: 19, VY: 19 }
    15) { IDX: B39, IDY: A19, VX: 19, VY: 19 }
 7) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: B0, VX: 0, VY: 0 }
     1) { IDX: B0, IDY: B1, VX: 0, VY: 0 }
     2) { IDX: B1, IDY: B0, VX: 0, VY: 0 }
     3) { IDX: B1, IDY: B1, VX: 0, VY: 0 }
     4) { IDX: B4, IDY: B4, VX: 2, VY: 2 }
     5) { IDX: B4, IDY: B5, VX: 2, VY: 2 }
     6) { IDX: B5, IDY: B4, VX: 2, VY: 2 }
     7) { IDX: B5, IDY: B5, VX: 2, VY: 2 }
     8) { IDX: B8, IDY: B8, VX: 4, VY: 4 }
     9) { IDX: B8, IDY: B9, VX: 4, VY: 4 }
    10) { IDX: B9, IDY: B8, VX: 4, VY: 4 }
    11) { IDX: B9, IDY: B9, VX: 4, VY: 4 }
    12) { IDX: B12, IDY: B12, VX: 6, VY: 6 }
    13) { IDX: B12, IDY: B13, VX: 6, VY: 6 }
    14) { IDX: B13, IDY: B12, VX: 6, VY: 6 }
    15) { IDX: B13, IDY: B13, VX: 6, VY: 6 }
    16) { IDX: B14, IDY: B14, VX: 7, VY: 7 }
    17) { IDX: B14, IDY: B15, VX: 7, VY: 7 }
    18) { IDX: B15, IDY: B14, VX: 7, VY: 7 }
    19) { IDX: B15, IDY: B15, VX: 7, VY: 7 }
    20) { IDX: B20, IDY: B20, VX: 10, VY: 10 }
    21) { IDX: B20, IDY: B21, VX: 10, VY: 10 }
    22) { IDX: B21, IDY: B20, VX: 10, VY: 10 }
    23) { IDX: B21, IDY: B21, VX: 10, VY: 10 }
    24) { IDX: B22, IDY: B22, VX: 11, VY: 11 }
    25) { IDX: B22, IDY: B23, VX: 11, VY: 11 }
    26) { IDX: B23, IDY: B22, VX: 11, VY: 11 }
    27) { IDX: B23, IDY: B23, VX: 11, VY: 11 }
    28) { IDX: B24, IDY: B24, VX: 12, VY: 12 }
    29) { IDX: B24, IDY: B25, VX: 12, VY: 12 }
    30) { IDX: B25, IDY: B24, VX: 12, VY: 12 }
    31) { IDX: B25, IDY: B25, VX: 12, VY: 12 }
    32) { IDX: B28, IDY: B28, VX: 14, VY: 14 }
    33) { IDX: B28, IDY: B29, VX: 14, VY: 14 }
    34) { IDX: B29, IDY: B28, VX: 14, VY: 14 }
    35) { IDX: B29, IDY: B29, VX: 14, VY: 14 }
    36) { IDX: B30, IDY: B30, VX: 15, VY: 15 }
    37) { IDX: B30, IDY: B31, VX: 15, VY: 15 }
    38) { IDX: B31, IDY: B30, VX: 15, VY: 15 }
    39) { IDX: B31, IDY: B31, VX: 15, VY: 15 }
    40) { IDX: B32, IDY: B32, VX: 16, VY: 16 }
    41) { IDX: B32, IDY: B33, VX: 16, VY: 16 }
    42) { IDX: B33, IDY: B32, VX: 16, VY: 16 }
    43) { IDX: B33, IDY: B33, VX: 16, VY: 16 }
    44) { IDX: B38, IDY: B38, VX: 19, VY: 19 }
    45) { IDX: B38, IDY: B39, VX: 19, VY: 19 }
    46) { IDX: B39, IDY: B38, VX: 19, VY: 19 }
    47) { IDX: B39, IDY: B39, VX: 19, VY: 19 }
 8) Sequence: Seq<{str,str,i8,i8}>
 9) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B22, IDY: D0, VX: 11, VY: 11 }
     1) { IDX: B23, IDY: D0, VX: 11, VY: 11 }
     2) { IDX: B24, IDY: D1, VX: 12, VY: 12 }
     3) { IDX: B25, IDY: D1, VX: 12, VY: 12 }
10) Sequence: Seq<{str,str,i8,i8}>
11) <null>
12) Sequence: Seq<{str,str,i8,i8}>
13) Sequence: Seq<{str,str,i8,i8}>
14) Sequence: Seq<{str,str,i8,i8}>
15) Sequence: Seq<{str,str,i8,i8}>
16) Sequence: Seq<{str,str,i8,i8}>
17) <null>
18) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D1, IDY: A12, VX: 12, VY: 12 }
     1) { IDX: D2, IDY: A13, VX: 13, VY: 13 }
19) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: B22, VX: 11, VY: 11 }
     1) { IDX: D0, IDY: B23, VX: 11, VY: 11 }
     2) { IDX: D1, IDY: B24, VX: 12, VY: 12 }
     3) { IDX: D1, IDY: B25, VX: 12, VY: 12 }
20) Sequence: Seq<{str,str,i8,i8}>
21) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: D0, VX: 11, VY: 11 }
     1) { IDX: D1, IDY: D1, VX: 12, VY: 12 }
     2) { IDX: D2, IDY: D2, VX: 13, VY: 13 }
22) Sequence: Seq<{str,str,i8,i8}>
23) <null>
24) Sequence: Seq<{str,str,i8,i8}>
25) Sequence: Seq<{str,str,i8,i8}>
26) Sequence: Seq<{str,str,i8,i8}>
27) Sequence: Seq<{str,str,i8,i8}>
28) Sequence: Seq<{str,str,i8,i8}>
29) <null>
30) <null>
31) <null>
32) <null>
33) <null>
34) <null>
35) <null>
*** Ctx ping count: 367
    [0:3](318=162+15+141): KeyJoin(*3: *1x, *4: *2x, *3.V, *4.V, {IDX:*3.ID, IDY:*4.ID, VX:*3.V, VY:*4.V})
    [3:5](49=7+42): CrossJoin(*1: XS, *2: YS, true, KeyJoin(*3: *1, *4: *2, *3.V, *4.V, {IDX:*3.ID, IDY:*4.ID, VX:*3.V, VY:*4.V}))
###
> CrossJoin(X:XS, Y:YS, true,   KeyJoin(x:X, y:Y,        V,     V , { IDX:x.ID, IDY:y.ID, VX:x.V, VY:y.V }))
CrossJoin(X : XS, Y : YS, true, KeyJoin(x : X, y : Y, V, V, { IDX : x.ID, IDY : y.ID, VX : x.V, VY : y.V })) : {IDX:s, IDY:s, VX:i8?, VY:i8?}**
BndKind:Call, Type:{IDX:s, IDY:s, VX:i8?, VY:i8?}**, Bnd:(Call(∂.CrossJoin([map:1] Global(XS), [map:2] Global(YS), true:b, Call(∂.KeyJoin([map:3] Scope(1), [map:4] Scope(2), GetField(Scope(3), V), GetField(Scope(4), V), {IDX:GetField(Scope(3), ID), IDY:GetField(Scope(4), ID), VX:GetField(Scope(3), V), VY:GetField(Scope(4), V)})))))
// (<ctx>, ∂.XS:{ID:s, V:i8?}**, ∂.YS:{ID:s, V:i8?}**) : {IDX:s, IDY:s, VX:i8?, VY:i8?}**
CrossJoin_2(Arr<obj>, Seq<{str,i8}>, Seq<{str,i8}>):bool
      1) ldc.i4.1
      1) ret
  Total Size: 2

KeyJoin_2(Arr<obj>, {str,i8}):Opt<i8>
      1) ldarg.1 [{str,i8}]
      1) dup
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      5) ldfld {str,i8}::_F1:i8
      5) newobj Opt<i8>(i8)
      5) br [1]
  Label [0]:
      1) pop
      5) call static CodeGenUtil::GetDefault():Opt<i8>
  Label [1]:
      1) ret
  Total Size: 36

KeyJoin_3(Arr<obj>, {str,i8}):Opt<i8>
      1) ldarg.1 [{str,i8}]
      1) dup
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      5) ldfld {str,i8}::_F1:i8
      5) newobj Opt<i8>(i8)
      5) br [1]
  Label [0]:
      1) pop
      5) call static CodeGenUtil::GetDefault():Opt<i8>
  Label [1]:
      1) ret
  Total Size: 36

KeyJoin_4(Arr<obj>, {str,i8}, {str,i8}):{str,str,i8,i8}
      5) newobj {str,str,i8,i8}()
      1) dup
      1) ldc.i4.3
      5) stfld {str,str,i8,i8}::_B0:u1
      1) stloc.0 [{str,str,i8,i8}]
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F0:str
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F1:str
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.4
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F1:i8
      5) stfld {str,str,i8,i8}::_F2:i8
  Label [0]:
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [1]
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.8
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F1:i8
      5) stfld {str,str,i8,i8}::_F3:i8
  Label [1]:
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 130

CrossJoin_3(Arr<obj>, Seq<{str,i8}>, Seq<{str,i8}>):Seq<{str,str,i8,i8}>
      1) ldarg.1 [Seq<{str,i8}>]
      1) ldarg.2 [Seq<{str,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<{str,i8},Opt<i8>>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [Func<{str,i8},Opt<i8>>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Func<{str,i8},{str,i8},{str,str,i8,i8}>]
      1) ldnull
      1) ldnull
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.3
      5) ldelem [EqualityComparer<Opt<i8>>]
      1) ldc.i4.1
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [ExecCtx]
      1) ldc.i4.0
      5) call static KeyJoinGen::Exec(Seq<{str,i8}>, Seq<{str,i8}>, Func<{str,i8},Opt<i8>>, Func<{str,i8},Opt<i8>>, Func<{str,i8},{str,i8},{str,str,i8,i8}>, Func<{str,i8},{str,str,i8,i8}>, Func<{str,i8},{str,str,i8,i8}>, EqualityComparer<Opt<i8>>, bool, ExecCtx, i4):Seq<{str,str,i8,i8}>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<{str,str,i8,i8}>):Seq<{str,str,i8,i8}>
      1) ret
  Total Size: 76

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):ExecCtx
      1) stloc.0 [ExecCtx]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<Seq<{str,i8}>>
      1) stloc.1 [Seq<Seq<{str,i8}>>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.2
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<Seq<{str,i8}>>
      1) stloc.2 [Seq<Seq<{str,i8}>>]
      1) ldloc.1 [Seq<Seq<{str,i8}>>]
      1) ldloc.2 [Seq<Seq<{str,i8}>>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<Seq<{str,i8}>,Seq<{str,i8}>,bool>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [MethodInfo]
      5) ldtoken [Func<Seq<{str,i8}>,Seq<{str,i8}>,Seq<{str,str,i8,i8}>>]
      5) call static Type::GetTypeFromHandle(RuntimeTypeHandle):Type
      1) ldc.i4.2
      5) newarr [obj]
      1) dup
      1) ldc.i4.0
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Arr<obj>]
      5) stelem [Arr<obj>]
      1) dup
      1) ldc.i4.1
      1) ldloc.0 [ExecCtx]
      5) stelem [ExecCtx]
      5) callvirt DynamicMethod::CreateDelegate(Type, obj):Delegate
      1) ldloc.0 [ExecCtx]
      1) ldc.i4.3
      5) call static CrossJoinGen::Exec(Seq<Seq<{str,i8}>>, Seq<Seq<{str,i8}>>, Func<Seq<{str,i8}>,Seq<{str,i8}>,bool>, Func<Seq<{str,i8}>,Seq<{str,i8}>,Seq<{str,str,i8,i8}>>, ExecCtx, i4):Seq<Seq<{str,str,i8,i8}>>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<Seq<{str,str,i8,i8}>>):Seq<Seq<{str,str,i8,i8}>>
      1) ret
  Total Size: 99

Func sig: (<ctx>:x, XS:{ID:s, V:i8?}**, YS:{ID:s, V:i8?}**) to {IDX:s, IDY:s, VX:i8?, VY:i8?}**
Sequence: Seq<Seq<{str,str,i8,i8}>>
 0) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: A0, VX: 0, VY: 0 }
     1) { IDX: A1, IDY: A1, VX: 1, VY: 1 }
     2) { IDX: A4, IDY: A4, VX: 4, VY: 4 }
     3) { IDX: A6, IDY: A6, VX: 6, VY: 6 }
     4) { IDX: A7, IDY: A7, VX: 7, VY: 7 }
     5) { IDX: A9, IDY: A9, VX: 9, VY: 9 }
     6) { IDX: A12, IDY: A12, VX: 12, VY: 12 }
     7) { IDX: A13, IDY: A13, VX: 13, VY: 13 }
     8) { IDX: A15, IDY: A15, VX: 15, VY: 15 }
     9) { IDX: A16, IDY: A16, VX: 16, VY: 16 }
    10) { IDX: A18, IDY: A18, VX: 18, VY: 18 }
    11) { IDX: A19, IDY: A19, VX: 19, VY: 19 }
 1) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: B0, VX: 0, VY: 0 }
     1) { IDX: A0, IDY: B1, VX: 0, VY: 0 }
     2) { IDX: A4, IDY: B8, VX: 4, VY: 4 }
     3) { IDX: A4, IDY: B9, VX: 4, VY: 4 }
     4) { IDX: A6, IDY: B12, VX: 6, VY: 6 }
     5) { IDX: A6, IDY: B13, VX: 6, VY: 6 }
     6) { IDX: A7, IDY: B14, VX: 7, VY: 7 }
     7) { IDX: A7, IDY: B15, VX: 7, VY: 7 }
     8) { IDX: A12, IDY: B24, VX: 12, VY: 12 }
     9) { IDX: A12, IDY: B25, VX: 12, VY: 12 }
    10) { IDX: A15, IDY: B30, VX: 15, VY: 15 }
    11) { IDX: A15, IDY: B31, VX: 15, VY: 15 }
    12) { IDX: A16, IDY: B32, VX: 16, VY: 16 }
    13) { IDX: A16, IDY: B33, VX: 16, VY: 16 }
    14) { IDX: A19, IDY: B38, VX: 19, VY: 19 }
    15) { IDX: A19, IDY: B39, VX: 19, VY: 19 }
 2) Sequence: Seq<{str,str,i8,i8}>
 3) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A12, IDY: D1, VX: 12, VY: 12 }
     1) { IDX: A13, IDY: D2, VX: 13, VY: 13 }
 4) Sequence: Seq<{str,str,i8,i8}>
 5) <null>
 6) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: A0, VX: 0, VY: 0 }
     1) { IDX: B1, IDY: A0, VX: 0, VY: 0 }
     2) { IDX: B8, IDY: A4, VX: 4, VY: 4 }
     3) { IDX: B9, IDY: A4, VX: 4, VY: 4 }
     4) { IDX: B12, IDY: A6, VX: 6, VY: 6 }
     5) { IDX: B13, IDY: A6, VX: 6, VY: 6 }
     6) { IDX: B14, IDY: A7, VX: 7, VY: 7 }
     7) { IDX: B15, IDY: A7, VX: 7, VY: 7 }
     8) { IDX: B24, IDY: A12, VX: 12, VY: 12 }
     9) { IDX: B25, IDY: A12, VX: 12, VY: 12 }
    10) { IDX: B30, IDY: A15, VX: 15, VY: 15 }
    11) { IDX: B31, IDY: A15, VX: 15, VY: 15 }
    12) { IDX: B32, IDY: A16, VX: 16, VY: 16 }
    13) { IDX: B33, IDY: A16, VX: 16, VY: 16 }
    14) { IDX: B38, IDY: A19, VX: 19, VY: 19 }
    15) { IDX: B39, IDY: A19, VX: 19, VY: 19 }
 7) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: B0, VX: 0, VY: 0 }
     1) { IDX: B0, IDY: B1, VX: 0, VY: 0 }
     2) { IDX: B1, IDY: B0, VX: 0, VY: 0 }
     3) { IDX: B1, IDY: B1, VX: 0, VY: 0 }
     4) { IDX: B4, IDY: B4, VX: 2, VY: 2 }
     5) { IDX: B4, IDY: B5, VX: 2, VY: 2 }
     6) { IDX: B5, IDY: B4, VX: 2, VY: 2 }
     7) { IDX: B5, IDY: B5, VX: 2, VY: 2 }
     8) { IDX: B8, IDY: B8, VX: 4, VY: 4 }
     9) { IDX: B8, IDY: B9, VX: 4, VY: 4 }
    10) { IDX: B9, IDY: B8, VX: 4, VY: 4 }
    11) { IDX: B9, IDY: B9, VX: 4, VY: 4 }
    12) { IDX: B12, IDY: B12, VX: 6, VY: 6 }
    13) { IDX: B12, IDY: B13, VX: 6, VY: 6 }
    14) { IDX: B13, IDY: B12, VX: 6, VY: 6 }
    15) { IDX: B13, IDY: B13, VX: 6, VY: 6 }
    16) { IDX: B14, IDY: B14, VX: 7, VY: 7 }
    17) { IDX: B14, IDY: B15, VX: 7, VY: 7 }
    18) { IDX: B15, IDY: B14, VX: 7, VY: 7 }
    19) { IDX: B15, IDY: B15, VX: 7, VY: 7 }
    20) { IDX: B20, IDY: B20, VX: 10, VY: 10 }
    21) { IDX: B20, IDY: B21, VX: 10, VY: 10 }
    22) { IDX: B21, IDY: B20, VX: 10, VY: 10 }
    23) { IDX: B21, IDY: B21, VX: 10, VY: 10 }
    24) { IDX: B22, IDY: B22, VX: 11, VY: 11 }
    25) { IDX: B22, IDY: B23, VX: 11, VY: 11 }
    26) { IDX: B23, IDY: B22, VX: 11, VY: 11 }
    27) { IDX: B23, IDY: B23, VX: 11, VY: 11 }
    28) { IDX: B24, IDY: B24, VX: 12, VY: 12 }
    29) { IDX: B24, IDY: B25, VX: 12, VY: 12 }
    30) { IDX: B25, IDY: B24, VX: 12, VY: 12 }
    31) { IDX: B25, IDY: B25, VX: 12, VY: 12 }
    32) { IDX: B28, IDY: B28, VX: 14, VY: 14 }
    33) { IDX: B28, IDY: B29, VX: 14, VY: 14 }
    34) { IDX: B29, IDY: B28, VX: 14, VY: 14 }
    35) { IDX: B29, IDY: B29, VX: 14, VY: 14 }
    36) { IDX: B30, IDY: B30, VX: 15, VY: 15 }
    37) { IDX: B30, IDY: B31, VX: 15, VY: 15 }
    38) { IDX: B31, IDY: B30, VX: 15, VY: 15 }
    39) { IDX: B31, IDY: B31, VX: 15, VY: 15 }
    40) { IDX: B32, IDY: B32, VX: 16, VY: 16 }
    41) { IDX: B32, IDY: B33, VX: 16, VY: 16 }
    42) { IDX: B33, IDY: B32, VX: 16, VY: 16 }
    43) { IDX: B33, IDY: B33, VX: 16, VY: 16 }
    44) { IDX: B38, IDY: B38, VX: 19, VY: 19 }
    45) { IDX: B38, IDY: B39, VX: 19, VY: 19 }
    46) { IDX: B39, IDY: B38, VX: 19, VY: 19 }
    47) { IDX: B39, IDY: B39, VX: 19, VY: 19 }
 8) Sequence: Seq<{str,str,i8,i8}>
 9) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B22, IDY: D0, VX: 11, VY: 11 }
     1) { IDX: B23, IDY: D0, VX: 11, VY: 11 }
     2) { IDX: B24, IDY: D1, VX: 12, VY: 12 }
     3) { IDX: B25, IDY: D1, VX: 12, VY: 12 }
10) Sequence: Seq<{str,str,i8,i8}>
11) <null>
12) Sequence: Seq<{str,str,i8,i8}>
13) Sequence: Seq<{str,str,i8,i8}>
14) Sequence: Seq<{str,str,i8,i8}>
15) Sequence: Seq<{str,str,i8,i8}>
16) Sequence: Seq<{str,str,i8,i8}>
17) <null>
18) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D1, IDY: A12, VX: 12, VY: 12 }
     1) { IDX: D2, IDY: A13, VX: 13, VY: 13 }
19) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: B22, VX: 11, VY: 11 }
     1) { IDX: D0, IDY: B23, VX: 11, VY: 11 }
     2) { IDX: D1, IDY: B24, VX: 12, VY: 12 }
     3) { IDX: D1, IDY: B25, VX: 12, VY: 12 }
20) Sequence: Seq<{str,str,i8,i8}>
21) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: D0, VX: 11, VY: 11 }
     1) { IDX: D1, IDY: D1, VX: 12, VY: 12 }
     2) { IDX: D2, IDY: D2, VX: 13, VY: 13 }
22) Sequence: Seq<{str,str,i8,i8}>
23) <null>
24) Sequence: Seq<{str,str,i8,i8}>
25) Sequence: Seq<{str,str,i8,i8}>
26) Sequence: Seq<{str,str,i8,i8}>
27) Sequence: Seq<{str,str,i8,i8}>
28) Sequence: Seq<{str,str,i8,i8}>
29) <null>
30) <null>
31) <null>
32) <null>
33) <null>
34) <null>
35) <null>
*** Ctx ping count: 367
    [0:3](318=162+15+141): KeyJoin(*3: *1x, *4: *2x, *3.V, *4.V, {IDX:*3.ID, IDY:*4.ID, VX:*3.V, VY:*4.V})
    [3:5](49=7+42): CrossJoin(*1: XS, *2: YS, true, KeyJoin(*3: *1, *4: *2, *3.V, *4.V, {IDX:*3.ID, IDY:*4.ID, VX:*3.V, VY:*4.V}))
###
> CrossJoin(X:XS, Y:YS, true,   KeyJoin(x:X, y:Y,     (V,),  (V,) , { IDX:x.ID, IDY:y.ID, VX:x.V, VY:y.V }))
CrossJoin(X : XS, Y : YS, true, KeyJoin(x : X, y : Y, (V,), (V,), { IDX : x.ID, IDY : y.ID, VX : x.V, VY : y.V })) : {IDX:s, IDY:s, VX:i8?, VY:i8?}**
BndKind:Call, Type:{IDX:s, IDY:s, VX:i8?, VY:i8?}**, Bnd:(Call(∂.CrossJoin([map:1] Global(XS), [map:2] Global(YS), true:b, Call(∂.KeyJoin([map:3] Scope(1), [map:4] Scope(2), (GetField(Scope(3), V),):(i8?), (GetField(Scope(4), V),):(i8?), {IDX:GetField(Scope(3), ID), IDY:GetField(Scope(4), ID), VX:GetField(Scope(3), V), VY:GetField(Scope(4), V)})))))
// (<ctx>, ∂.XS:{ID:s, V:i8?}**, ∂.YS:{ID:s, V:i8?}**) : {IDX:s, IDY:s, VX:i8?, VY:i8?}**
CrossJoin_2(Arr<obj>, Seq<{str,i8}>, Seq<{str,i8}>):bool
      1) ldc.i4.1
      1) ret
  Total Size: 2

KeyJoin_2(Arr<obj>, {str,i8}):(Opt<i8>)
      5) newobj (Opt<i8>)()
      1) dup
      1) ldarg.1 [{str,i8}]
      1) dup
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      5) ldfld {str,i8}::_F1:i8
      5) newobj Opt<i8>(i8)
      5) br [1]
  Label [0]:
      1) pop
      5) call static CodeGenUtil::GetDefault():Opt<i8>
  Label [1]:
      5) stfld (Opt<i8>)::_F0:Opt<i8>
      1) ret
  Total Size: 47

KeyJoin_3(Arr<obj>, {str,i8}):(Opt<i8>)
      5) newobj (Opt<i8>)()
      1) dup
      1) ldarg.1 [{str,i8}]
      1) dup
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      5) ldfld {str,i8}::_F1:i8
      5) newobj Opt<i8>(i8)
      5) br [1]
  Label [0]:
      1) pop
      5) call static CodeGenUtil::GetDefault():Opt<i8>
  Label [1]:
      5) stfld (Opt<i8>)::_F0:Opt<i8>
      1) ret
  Total Size: 47

KeyJoin_4(Arr<obj>, {str,i8}, {str,i8}):{str,str,i8,i8}
      5) newobj {str,str,i8,i8}()
      1) dup
      1) ldc.i4.3
      5) stfld {str,str,i8,i8}::_B0:u1
      1) stloc.0 [{str,str,i8,i8}]
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F0:str
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F1:str
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.4
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F1:i8
      5) stfld {str,str,i8,i8}::_F2:i8
  Label [0]:
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [1]
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.8
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F1:i8
      5) stfld {str,str,i8,i8}::_F3:i8
  Label [1]:
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 130

CrossJoin_3(Arr<obj>, Seq<{str,i8}>, Seq<{str,i8}>):Seq<{str,str,i8,i8}>
      1) ldarg.1 [Seq<{str,i8}>]
      1) ldarg.2 [Seq<{str,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<{str,i8},(Opt<i8>)>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [Func<{str,i8},(Opt<i8>)>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Func<{str,i8},{str,i8},{str,str,i8,i8}>]
      1) ldnull
      1) ldnull
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.3
      5) ldelem [EqualityComparer<(Opt<i8>)>]
      1) ldc.i4.1
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [ExecCtx]
      1) ldc.i4.0
      5) call static KeyJoinGen::Exec(Seq<{str,i8}>, Seq<{str,i8}>, Func<{str,i8},(Opt<i8>)>, Func<{str,i8},(Opt<i8>)>, Func<{str,i8},{str,i8},{str,str,i8,i8}>, Func<{str,i8},{str,str,i8,i8}>, Func<{str,i8},{str,str,i8,i8}>, EqualityComparer<(Opt<i8>)>, bool, ExecCtx, i4):Seq<{str,str,i8,i8}>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<{str,str,i8,i8}>):Seq<{str,str,i8,i8}>
      1) ret
  Total Size: 76

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):ExecCtx
      1) stloc.0 [ExecCtx]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<Seq<{str,i8}>>
      1) stloc.1 [Seq<Seq<{str,i8}>>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.2
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<Seq<{str,i8}>>
      1) stloc.2 [Seq<Seq<{str,i8}>>]
      1) ldloc.1 [Seq<Seq<{str,i8}>>]
      1) ldloc.2 [Seq<Seq<{str,i8}>>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<Seq<{str,i8}>,Seq<{str,i8}>,bool>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [MethodInfo]
      5) ldtoken [Func<Seq<{str,i8}>,Seq<{str,i8}>,Seq<{str,str,i8,i8}>>]
      5) call static Type::GetTypeFromHandle(RuntimeTypeHandle):Type
      1) ldc.i4.2
      5) newarr [obj]
      1) dup
      1) ldc.i4.0
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Arr<obj>]
      5) stelem [Arr<obj>]
      1) dup
      1) ldc.i4.1
      1) ldloc.0 [ExecCtx]
      5) stelem [ExecCtx]
      5) callvirt DynamicMethod::CreateDelegate(Type, obj):Delegate
      1) ldloc.0 [ExecCtx]
      1) ldc.i4.3
      5) call static CrossJoinGen::Exec(Seq<Seq<{str,i8}>>, Seq<Seq<{str,i8}>>, Func<Seq<{str,i8}>,Seq<{str,i8}>,bool>, Func<Seq<{str,i8}>,Seq<{str,i8}>,Seq<{str,str,i8,i8}>>, ExecCtx, i4):Seq<Seq<{str,str,i8,i8}>>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<Seq<{str,str,i8,i8}>>):Seq<Seq<{str,str,i8,i8}>>
      1) ret
  Total Size: 99

Func sig: (<ctx>:x, XS:{ID:s, V:i8?}**, YS:{ID:s, V:i8?}**) to {IDX:s, IDY:s, VX:i8?, VY:i8?}**
Sequence: Seq<Seq<{str,str,i8,i8}>>
 0) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: A0, VX: 0, VY: 0 }
     1) { IDX: A1, IDY: A1, VX: 1, VY: 1 }
     2) { IDX: A4, IDY: A4, VX: 4, VY: 4 }
     3) { IDX: A6, IDY: A6, VX: 6, VY: 6 }
     4) { IDX: A7, IDY: A7, VX: 7, VY: 7 }
     5) { IDX: A9, IDY: A9, VX: 9, VY: 9 }
     6) { IDX: A12, IDY: A12, VX: 12, VY: 12 }
     7) { IDX: A13, IDY: A13, VX: 13, VY: 13 }
     8) { IDX: A15, IDY: A15, VX: 15, VY: 15 }
     9) { IDX: A16, IDY: A16, VX: 16, VY: 16 }
    10) { IDX: A18, IDY: A18, VX: 18, VY: 18 }
    11) { IDX: A19, IDY: A19, VX: 19, VY: 19 }
 1) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: B0, VX: 0, VY: 0 }
     1) { IDX: A0, IDY: B1, VX: 0, VY: 0 }
     2) { IDX: A4, IDY: B8, VX: 4, VY: 4 }
     3) { IDX: A4, IDY: B9, VX: 4, VY: 4 }
     4) { IDX: A6, IDY: B12, VX: 6, VY: 6 }
     5) { IDX: A6, IDY: B13, VX: 6, VY: 6 }
     6) { IDX: A7, IDY: B14, VX: 7, VY: 7 }
     7) { IDX: A7, IDY: B15, VX: 7, VY: 7 }
     8) { IDX: A12, IDY: B24, VX: 12, VY: 12 }
     9) { IDX: A12, IDY: B25, VX: 12, VY: 12 }
    10) { IDX: A15, IDY: B30, VX: 15, VY: 15 }
    11) { IDX: A15, IDY: B31, VX: 15, VY: 15 }
    12) { IDX: A16, IDY: B32, VX: 16, VY: 16 }
    13) { IDX: A16, IDY: B33, VX: 16, VY: 16 }
    14) { IDX: A19, IDY: B38, VX: 19, VY: 19 }
    15) { IDX: A19, IDY: B39, VX: 19, VY: 19 }
 2) Sequence: Seq<{str,str,i8,i8}>
 3) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A12, IDY: D1, VX: 12, VY: 12 }
     1) { IDX: A13, IDY: D2, VX: 13, VY: 13 }
 4) Sequence: Seq<{str,str,i8,i8}>
 5) <null>
 6) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: A0, VX: 0, VY: 0 }
     1) { IDX: B1, IDY: A0, VX: 0, VY: 0 }
     2) { IDX: B8, IDY: A4, VX: 4, VY: 4 }
     3) { IDX: B9, IDY: A4, VX: 4, VY: 4 }
     4) { IDX: B12, IDY: A6, VX: 6, VY: 6 }
     5) { IDX: B13, IDY: A6, VX: 6, VY: 6 }
     6) { IDX: B14, IDY: A7, VX: 7, VY: 7 }
     7) { IDX: B15, IDY: A7, VX: 7, VY: 7 }
     8) { IDX: B24, IDY: A12, VX: 12, VY: 12 }
     9) { IDX: B25, IDY: A12, VX: 12, VY: 12 }
    10) { IDX: B30, IDY: A15, VX: 15, VY: 15 }
    11) { IDX: B31, IDY: A15, VX: 15, VY: 15 }
    12) { IDX: B32, IDY: A16, VX: 16, VY: 16 }
    13) { IDX: B33, IDY: A16, VX: 16, VY: 16 }
    14) { IDX: B38, IDY: A19, VX: 19, VY: 19 }
    15) { IDX: B39, IDY: A19, VX: 19, VY: 19 }
 7) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: B0, VX: 0, VY: 0 }
     1) { IDX: B0, IDY: B1, VX: 0, VY: 0 }
     2) { IDX: B1, IDY: B0, VX: 0, VY: 0 }
     3) { IDX: B1, IDY: B1, VX: 0, VY: 0 }
     4) { IDX: B4, IDY: B4, VX: 2, VY: 2 }
     5) { IDX: B4, IDY: B5, VX: 2, VY: 2 }
     6) { IDX: B5, IDY: B4, VX: 2, VY: 2 }
     7) { IDX: B5, IDY: B5, VX: 2, VY: 2 }
     8) { IDX: B8, IDY: B8, VX: 4, VY: 4 }
     9) { IDX: B8, IDY: B9, VX: 4, VY: 4 }
    10) { IDX: B9, IDY: B8, VX: 4, VY: 4 }
    11) { IDX: B9, IDY: B9, VX: 4, VY: 4 }
    12) { IDX: B12, IDY: B12, VX: 6, VY: 6 }
    13) { IDX: B12, IDY: B13, VX: 6, VY: 6 }
    14) { IDX: B13, IDY: B12, VX: 6, VY: 6 }
    15) { IDX: B13, IDY: B13, VX: 6, VY: 6 }
    16) { IDX: B14, IDY: B14, VX: 7, VY: 7 }
    17) { IDX: B14, IDY: B15, VX: 7, VY: 7 }
    18) { IDX: B15, IDY: B14, VX: 7, VY: 7 }
    19) { IDX: B15, IDY: B15, VX: 7, VY: 7 }
    20) { IDX: B20, IDY: B20, VX: 10, VY: 10 }
    21) { IDX: B20, IDY: B21, VX: 10, VY: 10 }
    22) { IDX: B21, IDY: B20, VX: 10, VY: 10 }
    23) { IDX: B21, IDY: B21, VX: 10, VY: 10 }
    24) { IDX: B22, IDY: B22, VX: 11, VY: 11 }
    25) { IDX: B22, IDY: B23, VX: 11, VY: 11 }
    26) { IDX: B23, IDY: B22, VX: 11, VY: 11 }
    27) { IDX: B23, IDY: B23, VX: 11, VY: 11 }
    28) { IDX: B24, IDY: B24, VX: 12, VY: 12 }
    29) { IDX: B24, IDY: B25, VX: 12, VY: 12 }
    30) { IDX: B25, IDY: B24, VX: 12, VY: 12 }
    31) { IDX: B25, IDY: B25, VX: 12, VY: 12 }
    32) { IDX: B28, IDY: B28, VX: 14, VY: 14 }
    33) { IDX: B28, IDY: B29, VX: 14, VY: 14 }
    34) { IDX: B29, IDY: B28, VX: 14, VY: 14 }
    35) { IDX: B29, IDY: B29, VX: 14, VY: 14 }
    36) { IDX: B30, IDY: B30, VX: 15, VY: 15 }
    37) { IDX: B30, IDY: B31, VX: 15, VY: 15 }
    38) { IDX: B31, IDY: B30, VX: 15, VY: 15 }
    39) { IDX: B31, IDY: B31, VX: 15, VY: 15 }
    40) { IDX: B32, IDY: B32, VX: 16, VY: 16 }
    41) { IDX: B32, IDY: B33, VX: 16, VY: 16 }
    42) { IDX: B33, IDY: B32, VX: 16, VY: 16 }
    43) { IDX: B33, IDY: B33, VX: 16, VY: 16 }
    44) { IDX: B38, IDY: B38, VX: 19, VY: 19 }
    45) { IDX: B38, IDY: B39, VX: 19, VY: 19 }
    46) { IDX: B39, IDY: B38, VX: 19, VY: 19 }
    47) { IDX: B39, IDY: B39, VX: 19, VY: 19 }
 8) Sequence: Seq<{str,str,i8,i8}>
 9) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B22, IDY: D0, VX: 11, VY: 11 }
     1) { IDX: B23, IDY: D0, VX: 11, VY: 11 }
     2) { IDX: B24, IDY: D1, VX: 12, VY: 12 }
     3) { IDX: B25, IDY: D1, VX: 12, VY: 12 }
10) Sequence: Seq<{str,str,i8,i8}>
11) <null>
12) Sequence: Seq<{str,str,i8,i8}>
13) Sequence: Seq<{str,str,i8,i8}>
14) Sequence: Seq<{str,str,i8,i8}>
15) Sequence: Seq<{str,str,i8,i8}>
16) Sequence: Seq<{str,str,i8,i8}>
17) <null>
18) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D1, IDY: A12, VX: 12, VY: 12 }
     1) { IDX: D2, IDY: A13, VX: 13, VY: 13 }
19) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: B22, VX: 11, VY: 11 }
     1) { IDX: D0, IDY: B23, VX: 11, VY: 11 }
     2) { IDX: D1, IDY: B24, VX: 12, VY: 12 }
     3) { IDX: D1, IDY: B25, VX: 12, VY: 12 }
20) Sequence: Seq<{str,str,i8,i8}>
21) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: D0, VX: 11, VY: 11 }
     1) { IDX: D1, IDY: D1, VX: 12, VY: 12 }
     2) { IDX: D2, IDY: D2, VX: 13, VY: 13 }
22) Sequence: Seq<{str,str,i8,i8}>
23) <null>
24) Sequence: Seq<{str,str,i8,i8}>
25) Sequence: Seq<{str,str,i8,i8}>
26) Sequence: Seq<{str,str,i8,i8}>
27) Sequence: Seq<{str,str,i8,i8}>
28) Sequence: Seq<{str,str,i8,i8}>
29) <null>
30) <null>
31) <null>
32) <null>
33) <null>
34) <null>
35) <null>
*** Ctx ping count: 367
    [0:3](318=162+15+141): KeyJoin(*3: *1x, *4: *2x, (*3.V,), (*4.V,), {IDX:*3.ID, IDY:*4.ID, VX:*3.V, VY:*4.V})
    [3:5](49=7+42): CrossJoin(*1: XS, *2: YS, true, KeyJoin(*3: *1, *4: *2, (*3.V,), (*4.V,), {IDX:*3.ID, IDY:*4.ID, VX:*3.V, VY:*4.V}))
###
> CrossJoin(X:XS, Y:YS, true, CrossJoin(x:X, y:Y, Wrap(x.V  = y.V), { IDX:x.ID, IDY:y.ID, VX:x.V, VY:y.V }, { IDX:ID, VX:V, VY:-1 }))
CrossJoin(X : XS, Y : YS, true, CrossJoin(x : X, y : Y, Wrap(x.V @= y.V), { IDX : x.ID, IDY : y.ID, VX : x.V, VY : y.V }, { IDX : ID, VX : V, VY : -1 })) : {IDX:s, IDY:s, VX:i8?, VY:i8?}**
BndKind:Call, Type:{IDX:s, IDY:s, VX:i8?, VY:i8?}**, Bnd:(Call(∂.CrossJoin([map:1] Global(XS), [map:2] Global(YS), true:b, Call(∂.CrossJoin([map:3] Scope(1), [map:4] Scope(2), Call(∂.Test.Wrap(Cmp(GetField(Scope(3), V) @= GetField(Scope(4), V))):b), {IDX:GetField(Scope(3), ID), IDY:GetField(Scope(4), ID), VX:GetField(Scope(3), V), VY:GetField(Scope(4), V)}, {IDX:GetField(Scope(3), ID), VX:GetField(Scope(3), V), VY:Opt<i8?>(-1:i8)[, IDY:str(<null>)]})))))
// (<ctx>, ∂.XS:{ID:s, V:i8?}**, ∂.YS:{ID:s, V:i8?}**) : {IDX:s, IDY:s, VX:i8?, VY:i8?}**
CrossJoin_2(Arr<obj>, Seq<{str,i8}>, Seq<{str,i8}>):bool
      1) ldc.i4.1
      1) ret
  Total Size: 2

CrossJoin_2(Arr<obj>, {str,i8}, {str,i8}):bool
      1) ldarg.1 [{str,i8}]
      1) dup
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      5) ldfld {str,i8}::_F1:i8
      5) newobj Opt<i8>(i8)
      5) br [1]
  Label [0]:
      1) pop
      5) call static CodeGenUtil::GetDefault():Opt<i8>
  Label [1]:
      1) stloc.0 [Opt<i8>]
      1) ldarg.2 [{str,i8}]
      1) dup
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [2]
      5) ldfld {str,i8}::_F1:i8
      5) newobj Opt<i8>(i8)
      5) br [3]
  Label [2]:
      1) pop
      5) call static CodeGenUtil::GetDefault():Opt<i8>
  Label [3]:
      1) stloc.1 [Opt<i8>]
      2) ldloca.s [Opt<i8> (0)]
      5) call Opt<i8>::get_HasValue():bool
      2) ldloca.s [Opt<i8> (1)]
      5) call Opt<i8>::get_HasValue():bool
      5) bne.un [4]
      2) ldloca.s [Opt<i8> (0)]
      5) call Opt<i8>::GetValueOrDefault():i8
      2) ldloca.s [Opt<i8> (1)]
      5) call Opt<i8>::GetValueOrDefault():i8
      2) ceq
      5) br [5]
  Label [4]:
      1) ldc.i4.0
  Label [5]:
      5) call static WrapFuncGen::Exec(bool):bool
      1) ret
  Total Size: 119

CrossJoin_3(Arr<obj>, {str,i8}, {str,i8}):{str,str,i8,i8}
      5) newobj {str,str,i8,i8}()
      1) dup
      1) ldc.i4.3
      5) stfld {str,str,i8,i8}::_B0:u1
      1) stloc.0 [{str,str,i8,i8}]
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F0:str
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F1:str
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.4
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F1:i8
      5) stfld {str,str,i8,i8}::_F2:i8
  Label [0]:
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [1]
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.8
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F1:i8
      5) stfld {str,str,i8,i8}::_F3:i8
  Label [1]:
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 130

CrossJoin_4(Arr<obj>, {str,i8}):{str,str,i8,i8}
      5) newobj {str,str,i8,i8}()
      1) dup
      1) ldc.i4.3
      5) stfld {str,str,i8,i8}::_B0:u1
      1) stloc.0 [{str,str,i8,i8}]
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F0:str
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.4
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F1:i8
      5) stfld {str,str,i8,i8}::_F2:i8
  Label [0]:
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldc.i4.m1
      1) conv.i8
      5) stfld {str,str,i8,i8}::_F3:i8
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.8
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 101

CrossJoin_3(Arr<obj>, Seq<{str,i8}>, Seq<{str,i8}>):Seq<{str,str,i8,i8}>
      1) ldarg.1 [Seq<{str,i8}>]
      1) ldarg.2 [Seq<{str,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<{str,i8},{str,i8},bool>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [Func<{str,i8},{str,i8},{str,str,i8,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Func<{str,i8},{str,str,i8,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [ExecCtx]
      1) ldc.i4.0
      5) call static CrossJoinGen::Exec(Seq<{str,i8}>, Seq<{str,i8}>, Func<{str,i8},{str,i8},bool>, Func<{str,i8},{str,i8},{str,str,i8,i8}>, Func<{str,i8},{str,str,i8,i8}>, ExecCtx, i4):Seq<{str,str,i8,i8}>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<{str,str,i8,i8}>):Seq<{str,str,i8,i8}>
      1) ret
  Total Size: 60

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):ExecCtx
      1) stloc.0 [ExecCtx]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<Seq<{str,i8}>>
      1) stloc.1 [Seq<Seq<{str,i8}>>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.2
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<Seq<{str,i8}>>
      1) stloc.2 [Seq<Seq<{str,i8}>>]
      1) ldloc.1 [Seq<Seq<{str,i8}>>]
      1) ldloc.2 [Seq<Seq<{str,i8}>>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<Seq<{str,i8}>,Seq<{str,i8}>,bool>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [MethodInfo]
      5) ldtoken [Func<Seq<{str,i8}>,Seq<{str,i8}>,Seq<{str,str,i8,i8}>>]
      5) call static Type::GetTypeFromHandle(RuntimeTypeHandle):Type
      1) ldc.i4.2
      5) newarr [obj]
      1) dup
      1) ldc.i4.0
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Arr<obj>]
      5) stelem [Arr<obj>]
      1) dup
      1) ldc.i4.1
      1) ldloc.0 [ExecCtx]
      5) stelem [ExecCtx]
      5) callvirt DynamicMethod::CreateDelegate(Type, obj):Delegate
      1) ldloc.0 [ExecCtx]
      1) ldc.i4.2
      5) call static CrossJoinGen::Exec(Seq<Seq<{str,i8}>>, Seq<Seq<{str,i8}>>, Func<Seq<{str,i8}>,Seq<{str,i8}>,bool>, Func<Seq<{str,i8}>,Seq<{str,i8}>,Seq<{str,str,i8,i8}>>, ExecCtx, i4):Seq<Seq<{str,str,i8,i8}>>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<Seq<{str,str,i8,i8}>>):Seq<Seq<{str,str,i8,i8}>>
      1) ret
  Total Size: 99

Func sig: (<ctx>:x, XS:{ID:s, V:i8?}**, YS:{ID:s, V:i8?}**) to {IDX:s, IDY:s, VX:i8?, VY:i8?}**
Sequence: Seq<Seq<{str,str,i8,i8}>>
 0) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: A0, VX: 0, VY: 0 }
     1) { IDX: A1, IDY: A1, VX: 1, VY: 1 }
     2) { IDX: A3, IDY: A3, VX: <null>, VY: <null> }
     3) { IDX: A3, IDY: A10, VX: <null>, VY: <null> }
     4) { IDX: A4, IDY: A4, VX: 4, VY: 4 }
     5) { IDX: A6, IDY: A6, VX: 6, VY: 6 }
     6) { IDX: A7, IDY: A7, VX: 7, VY: 7 }
     7) { IDX: A9, IDY: A9, VX: 9, VY: 9 }
     8) { IDX: A10, IDY: A3, VX: <null>, VY: <null> }
     9) { IDX: A10, IDY: A10, VX: <null>, VY: <null> }
    10) { IDX: A12, IDY: A12, VX: 12, VY: 12 }
    11) { IDX: A13, IDY: A13, VX: 13, VY: 13 }
    12) { IDX: A15, IDY: A15, VX: 15, VY: 15 }
    13) { IDX: A16, IDY: A16, VX: 16, VY: 16 }
    14) { IDX: A18, IDY: A18, VX: 18, VY: 18 }
    15) { IDX: A19, IDY: A19, VX: 19, VY: 19 }
 1) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: B0, VX: 0, VY: 0 }
     1) { IDX: A0, IDY: B1, VX: 0, VY: 0 }
     2) { IDX: A1, IDY: <null>, VX: 1, VY: -1 }
     3) { IDX: A3, IDY: B6, VX: <null>, VY: <null> }
     4) { IDX: A3, IDY: B7, VX: <null>, VY: <null> }
     5) { IDX: A3, IDY: B16, VX: <null>, VY: <null> }
     6) { IDX: A3, IDY: B17, VX: <null>, VY: <null> }
     7) { IDX: A3, IDY: B36, VX: <null>, VY: <null> }
     8) { IDX: A3, IDY: B37, VX: <null>, VY: <null> }
     9) { IDX: A4, IDY: B8, VX: 4, VY: 4 }
    10) { IDX: A4, IDY: B9, VX: 4, VY: 4 }
    11) { IDX: A6, IDY: B12, VX: 6, VY: 6 }
    12) { IDX: A6, IDY: B13, VX: 6, VY: 6 }
    13) { IDX: A7, IDY: B14, VX: 7, VY: 7 }
    14) { IDX: A7, IDY: B15, VX: 7, VY: 7 }
    15) { IDX: A9, IDY: <null>, VX: 9, VY: -1 }
    16) { IDX: A10, IDY: B6, VX: <null>, VY: <null> }
    17) { IDX: A10, IDY: B7, VX: <null>, VY: <null> }
    18) { IDX: A10, IDY: B16, VX: <null>, VY: <null> }
    19) { IDX: A10, IDY: B17, VX: <null>, VY: <null> }
    20) { IDX: A10, IDY: B36, VX: <null>, VY: <null> }
    21) { IDX: A10, IDY: B37, VX: <null>, VY: <null> }
    22) { IDX: A12, IDY: B24, VX: 12, VY: 12 }
    23) { IDX: A12, IDY: B25, VX: 12, VY: 12 }
    24) { IDX: A13, IDY: <null>, VX: 13, VY: -1 }
    25) { IDX: A15, IDY: B30, VX: 15, VY: 15 }
    26) { IDX: A15, IDY: B31, VX: 15, VY: 15 }
    27) { IDX: A16, IDY: B32, VX: 16, VY: 16 }
    28) { IDX: A16, IDY: B33, VX: 16, VY: 16 }
    29) { IDX: A18, IDY: <null>, VX: 18, VY: -1 }
    30) { IDX: A19, IDY: B38, VX: 19, VY: 19 }
    31) { IDX: A19, IDY: B39, VX: 19, VY: 19 }
 2) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: A1, IDY: <null>, VX: 1, VY: -1 }
     2) { IDX: A3, IDY: C0, VX: <null>, VY: <null> }
     3) { IDX: A3, IDY: C1, VX: <null>, VY: <null> }
     4) { IDX: A3, IDY: C2, VX: <null>, VY: <null> }
     5) { IDX: A4, IDY: <null>, VX: 4, VY: -1 }
     6) { IDX: A6, IDY: <null>, VX: 6, VY: -1 }
     7) { IDX: A7, IDY: <null>, VX: 7, VY: -1 }
     8) { IDX: A9, IDY: <null>, VX: 9, VY: -1 }
     9) { IDX: A10, IDY: C0, VX: <null>, VY: <null> }
    10) { IDX: A10, IDY: C1, VX: <null>, VY: <null> }
    11) { IDX: A10, IDY: C2, VX: <null>, VY: <null> }
    12) { IDX: A12, IDY: <null>, VX: 12, VY: -1 }
    13) { IDX: A13, IDY: <null>, VX: 13, VY: -1 }
    14) { IDX: A15, IDY: <null>, VX: 15, VY: -1 }
    15) { IDX: A16, IDY: <null>, VX: 16, VY: -1 }
    16) { IDX: A18, IDY: <null>, VX: 18, VY: -1 }
    17) { IDX: A19, IDY: <null>, VX: 19, VY: -1 }
 3) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: A1, IDY: <null>, VX: 1, VY: -1 }
     2) { IDX: A3, IDY: <null>, VX: <null>, VY: -1 }
     3) { IDX: A4, IDY: <null>, VX: 4, VY: -1 }
     4) { IDX: A6, IDY: <null>, VX: 6, VY: -1 }
     5) { IDX: A7, IDY: <null>, VX: 7, VY: -1 }
     6) { IDX: A9, IDY: <null>, VX: 9, VY: -1 }
     7) { IDX: A10, IDY: <null>, VX: <null>, VY: -1 }
     8) { IDX: A12, IDY: D1, VX: 12, VY: 12 }
     9) { IDX: A13, IDY: D2, VX: 13, VY: 13 }
    10) { IDX: A15, IDY: <null>, VX: 15, VY: -1 }
    11) { IDX: A16, IDY: <null>, VX: 16, VY: -1 }
    12) { IDX: A18, IDY: <null>, VX: 18, VY: -1 }
    13) { IDX: A19, IDY: <null>, VX: 19, VY: -1 }
 4) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: A1, IDY: <null>, VX: 1, VY: -1 }
     2) { IDX: A3, IDY: <null>, VX: <null>, VY: -1 }
     3) { IDX: A4, IDY: <null>, VX: 4, VY: -1 }
     4) { IDX: A6, IDY: <null>, VX: 6, VY: -1 }
     5) { IDX: A7, IDY: <null>, VX: 7, VY: -1 }
     6) { IDX: A9, IDY: <null>, VX: 9, VY: -1 }
     7) { IDX: A10, IDY: <null>, VX: <null>, VY: -1 }
     8) { IDX: A12, IDY: <null>, VX: 12, VY: -1 }
     9) { IDX: A13, IDY: <null>, VX: 13, VY: -1 }
    10) { IDX: A15, IDY: <null>, VX: 15, VY: -1 }
    11) { IDX: A16, IDY: <null>, VX: 16, VY: -1 }
    12) { IDX: A18, IDY: <null>, VX: 18, VY: -1 }
    13) { IDX: A19, IDY: <null>, VX: 19, VY: -1 }
 5) <null>
 6) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: A0, VX: 0, VY: 0 }
     1) { IDX: B1, IDY: A0, VX: 0, VY: 0 }
     2) { IDX: B4, IDY: <null>, VX: 2, VY: -1 }
     3) { IDX: B5, IDY: <null>, VX: 2, VY: -1 }
     4) { IDX: B6, IDY: A3, VX: <null>, VY: <null> }
     5) { IDX: B6, IDY: A10, VX: <null>, VY: <null> }
     6) { IDX: B7, IDY: A3, VX: <null>, VY: <null> }
     7) { IDX: B7, IDY: A10, VX: <null>, VY: <null> }
     8) { IDX: B8, IDY: A4, VX: 4, VY: 4 }
     9) { IDX: B9, IDY: A4, VX: 4, VY: 4 }
    10) { IDX: B12, IDY: A6, VX: 6, VY: 6 }
    11) { IDX: B13, IDY: A6, VX: 6, VY: 6 }
    12) { IDX: B14, IDY: A7, VX: 7, VY: 7 }
    13) { IDX: B15, IDY: A7, VX: 7, VY: 7 }
    14) { IDX: B16, IDY: A3, VX: <null>, VY: <null> }
    15) { IDX: B16, IDY: A10, VX: <null>, VY: <null> }
    16) { IDX: B17, IDY: A3, VX: <null>, VY: <null> }
    17) { IDX: B17, IDY: A10, VX: <null>, VY: <null> }
    18) { IDX: B20, IDY: <null>, VX: 10, VY: -1 }
    19) { IDX: B21, IDY: <null>, VX: 10, VY: -1 }
    20) { IDX: B22, IDY: <null>, VX: 11, VY: -1 }
    21) { IDX: B23, IDY: <null>, VX: 11, VY: -1 }
    22) { IDX: B24, IDY: A12, VX: 12, VY: 12 }
    23) { IDX: B25, IDY: A12, VX: 12, VY: 12 }
    24) { IDX: B28, IDY: <null>, VX: 14, VY: -1 }
    25) { IDX: B29, IDY: <null>, VX: 14, VY: -1 }
    26) { IDX: B30, IDY: A15, VX: 15, VY: 15 }
    27) { IDX: B31, IDY: A15, VX: 15, VY: 15 }
    28) { IDX: B32, IDY: A16, VX: 16, VY: 16 }
    29) { IDX: B33, IDY: A16, VX: 16, VY: 16 }
    30) { IDX: B36, IDY: A3, VX: <null>, VY: <null> }
    31) { IDX: B36, IDY: A10, VX: <null>, VY: <null> }
    32) { IDX: B37, IDY: A3, VX: <null>, VY: <null> }
    33) { IDX: B37, IDY: A10, VX: <null>, VY: <null> }
    34) { IDX: B38, IDY: A19, VX: 19, VY: 19 }
    35) { IDX: B39, IDY: A19, VX: 19, VY: 19 }
 7) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: B0, VX: 0, VY: 0 }
     1) { IDX: B0, IDY: B1, VX: 0, VY: 0 }
     2) { IDX: B1, IDY: B0, VX: 0, VY: 0 }
     3) { IDX: B1, IDY: B1, VX: 0, VY: 0 }
     4) { IDX: B4, IDY: B4, VX: 2, VY: 2 }
     5) { IDX: B4, IDY: B5, VX: 2, VY: 2 }
     6) { IDX: B5, IDY: B4, VX: 2, VY: 2 }
     7) { IDX: B5, IDY: B5, VX: 2, VY: 2 }
     8) { IDX: B6, IDY: B6, VX: <null>, VY: <null> }
     9) { IDX: B6, IDY: B7, VX: <null>, VY: <null> }
    10) { IDX: B6, IDY: B16, VX: <null>, VY: <null> }
    11) { IDX: B6, IDY: B17, VX: <null>, VY: <null> }
    12) { IDX: B6, IDY: B36, VX: <null>, VY: <null> }
    13) { IDX: B6, IDY: B37, VX: <null>, VY: <null> }
    14) { IDX: B7, IDY: B6, VX: <null>, VY: <null> }
    15) { IDX: B7, IDY: B7, VX: <null>, VY: <null> }
    16) { IDX: B7, IDY: B16, VX: <null>, VY: <null> }
    17) { IDX: B7, IDY: B17, VX: <null>, VY: <null> }
    18) { IDX: B7, IDY: B36, VX: <null>, VY: <null> }
    19) { IDX: B7, IDY: B37, VX: <null>, VY: <null> }
    20) { IDX: B8, IDY: B8, VX: 4, VY: 4 }
    21) { IDX: B8, IDY: B9, VX: 4, VY: 4 }
    22) { IDX: B9, IDY: B8, VX: 4, VY: 4 }
    23) { IDX: B9, IDY: B9, VX: 4, VY: 4 }
    24) { IDX: B12, IDY: B12, VX: 6, VY: 6 }
    25) { IDX: B12, IDY: B13, VX: 6, VY: 6 }
    26) { IDX: B13, IDY: B12, VX: 6, VY: 6 }
    27) { IDX: B13, IDY: B13, VX: 6, VY: 6 }
    28) { IDX: B14, IDY: B14, VX: 7, VY: 7 }
    29) { IDX: B14, IDY: B15, VX: 7, VY: 7 }
    30) { IDX: B15, IDY: B14, VX: 7, VY: 7 }
    31) { IDX: B15, IDY: B15, VX: 7, VY: 7 }
    32) { IDX: B16, IDY: B6, VX: <null>, VY: <null> }
    33) { IDX: B16, IDY: B7, VX: <null>, VY: <null> }
    34) { IDX: B16, IDY: B16, VX: <null>, VY: <null> }
    35) { IDX: B16, IDY: B17, VX: <null>, VY: <null> }
    36) { IDX: B16, IDY: B36, VX: <null>, VY: <null> }
    37) { IDX: B16, IDY: B37, VX: <null>, VY: <null> }
    38) { IDX: B17, IDY: B6, VX: <null>, VY: <null> }
    39) { IDX: B17, IDY: B7, VX: <null>, VY: <null> }
    40) { IDX: B17, IDY: B16, VX: <null>, VY: <null> }
    41) { IDX: B17, IDY: B17, VX: <null>, VY: <null> }
    42) { IDX: B17, IDY: B36, VX: <null>, VY: <null> }
    43) { IDX: B17, IDY: B37, VX: <null>, VY: <null> }
    44) { IDX: B20, IDY: B20, VX: 10, VY: 10 }
    45) { IDX: B20, IDY: B21, VX: 10, VY: 10 }
    46) { IDX: B21, IDY: B20, VX: 10, VY: 10 }
    47) { IDX: B21, IDY: B21, VX: 10, VY: 10 }
    48) { IDX: B22, IDY: B22, VX: 11, VY: 11 }
    49) { IDX: B22, IDY: B23, VX: 11, VY: 11 }
    50) { IDX: B23, IDY: B22, VX: 11, VY: 11 }
    51) { IDX: B23, IDY: B23, VX: 11, VY: 11 }
    52) { IDX: B24, IDY: B24, VX: 12, VY: 12 }
    53) { IDX: B24, IDY: B25, VX: 12, VY: 12 }
    54) { IDX: B25, IDY: B24, VX: 12, VY: 12 }
    55) { IDX: B25, IDY: B25, VX: 12, VY: 12 }
    56) { IDX: B28, IDY: B28, VX: 14, VY: 14 }
    57) { IDX: B28, IDY: B29, VX: 14, VY: 14 }
    58) { IDX: B29, IDY: B28, VX: 14, VY: 14 }
    59) { IDX: B29, IDY: B29, VX: 14, VY: 14 }
    60) { IDX: B30, IDY: B30, VX: 15, VY: 15 }
    61) { IDX: B30, IDY: B31, VX: 15, VY: 15 }
    62) { IDX: B31, IDY: B30, VX: 15, VY: 15 }
    63) { IDX: B31, IDY: B31, VX: 15, VY: 15 }
    64) { IDX: B32, IDY: B32, VX: 16, VY: 16 }
    65) { IDX: B32, IDY: B33, VX: 16, VY: 16 }
    66) { IDX: B33, IDY: B32, VX: 16, VY: 16 }
    67) { IDX: B33, IDY: B33, VX: 16, VY: 16 }
    68) { IDX: B36, IDY: B6, VX: <null>, VY: <null> }
    69) { IDX: B36, IDY: B7, VX: <null>, VY: <null> }
    70) { IDX: B36, IDY: B16, VX: <null>, VY: <null> }
    71) { IDX: B36, IDY: B17, VX: <null>, VY: <null> }
    72) { IDX: B36, IDY: B36, VX: <null>, VY: <null> }
    73) { IDX: B36, IDY: B37, VX: <null>, VY: <null> }
    74) { IDX: B37, IDY: B6, VX: <null>, VY: <null> }
    75) { IDX: B37, IDY: B7, VX: <null>, VY: <null> }
    76) { IDX: B37, IDY: B16, VX: <null>, VY: <null> }
    77) { IDX: B37, IDY: B17, VX: <null>, VY: <null> }
    78) { IDX: B37, IDY: B36, VX: <null>, VY: <null> }
    79) { IDX: B37, IDY: B37, VX: <null>, VY: <null> }
    80) { IDX: B38, IDY: B38, VX: 19, VY: 19 }
    81) { IDX: B38, IDY: B39, VX: 19, VY: 19 }
    82) { IDX: B39, IDY: B38, VX: 19, VY: 19 }
    83) { IDX: B39, IDY: B39, VX: 19, VY: 19 }
 8) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: B1, IDY: <null>, VX: 0, VY: -1 }
     2) { IDX: B4, IDY: <null>, VX: 2, VY: -1 }
     3) { IDX: B5, IDY: <null>, VX: 2, VY: -1 }
     4) { IDX: B6, IDY: C0, VX: <null>, VY: <null> }
     5) { IDX: B6, IDY: C1, VX: <null>, VY: <null> }
     6) { IDX: B6, IDY: C2, VX: <null>, VY: <null> }
     7) { IDX: B7, IDY: C0, VX: <null>, VY: <null> }
     8) { IDX: B7, IDY: C1, VX: <null>, VY: <null> }
     9) { IDX: B7, IDY: C2, VX: <null>, VY: <null> }
    10) { IDX: B8, IDY: <null>, VX: 4, VY: -1 }
    11) { IDX: B9, IDY: <null>, VX: 4, VY: -1 }
    12) { IDX: B12, IDY: <null>, VX: 6, VY: -1 }
    13) { IDX: B13, IDY: <null>, VX: 6, VY: -1 }
    14) { IDX: B14, IDY: <null>, VX: 7, VY: -1 }
    15) { IDX: B15, IDY: <null>, VX: 7, VY: -1 }
    16) { IDX: B16, IDY: C0, VX: <null>, VY: <null> }
    17) { IDX: B16, IDY: C1, VX: <null>, VY: <null> }
    18) { IDX: B16, IDY: C2, VX: <null>, VY: <null> }
    19) { IDX: B17, IDY: C0, VX: <null>, VY: <null> }
    20) { IDX: B17, IDY: C1, VX: <null>, VY: <null> }
    21) { IDX: B17, IDY: C2, VX: <null>, VY: <null> }
    22) { IDX: B20, IDY: <null>, VX: 10, VY: -1 }
    23) { IDX: B21, IDY: <null>, VX: 10, VY: -1 }
    24) { IDX: B22, IDY: <null>, VX: 11, VY: -1 }
    25) { IDX: B23, IDY: <null>, VX: 11, VY: -1 }
    26) { IDX: B24, IDY: <null>, VX: 12, VY: -1 }
    27) { IDX: B25, IDY: <null>, VX: 12, VY: -1 }
    28) { IDX: B28, IDY: <null>, VX: 14, VY: -1 }
    29) { IDX: B29, IDY: <null>, VX: 14, VY: -1 }
    30) { IDX: B30, IDY: <null>, VX: 15, VY: -1 }
    31) { IDX: B31, IDY: <null>, VX: 15, VY: -1 }
    32) { IDX: B32, IDY: <null>, VX: 16, VY: -1 }
    33) { IDX: B33, IDY: <null>, VX: 16, VY: -1 }
    34) { IDX: B36, IDY: C0, VX: <null>, VY: <null> }
    35) { IDX: B36, IDY: C1, VX: <null>, VY: <null> }
    36) { IDX: B36, IDY: C2, VX: <null>, VY: <null> }
    37) { IDX: B37, IDY: C0, VX: <null>, VY: <null> }
    38) { IDX: B37, IDY: C1, VX: <null>, VY: <null> }
    39) { IDX: B37, IDY: C2, VX: <null>, VY: <null> }
    40) { IDX: B38, IDY: <null>, VX: 19, VY: -1 }
    41) { IDX: B39, IDY: <null>, VX: 19, VY: -1 }
 9) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: B1, IDY: <null>, VX: 0, VY: -1 }
     2) { IDX: B4, IDY: <null>, VX: 2, VY: -1 }
     3) { IDX: B5, IDY: <null>, VX: 2, VY: -1 }
     4) { IDX: B6, IDY: <null>, VX: <null>, VY: -1 }
     5) { IDX: B7, IDY: <null>, VX: <null>, VY: -1 }
     6) { IDX: B8, IDY: <null>, VX: 4, VY: -1 }
     7) { IDX: B9, IDY: <null>, VX: 4, VY: -1 }
     8) { IDX: B12, IDY: <null>, VX: 6, VY: -1 }
     9) { IDX: B13, IDY: <null>, VX: 6, VY: -1 }
    10) { IDX: B14, IDY: <null>, VX: 7, VY: -1 }
    11) { IDX: B15, IDY: <null>, VX: 7, VY: -1 }
    12) { IDX: B16, IDY: <null>, VX: <null>, VY: -1 }
    13) { IDX: B17, IDY: <null>, VX: <null>, VY: -1 }
    14) { IDX: B20, IDY: <null>, VX: 10, VY: -1 }
    15) { IDX: B21, IDY: <null>, VX: 10, VY: -1 }
    16) { IDX: B22, IDY: D0, VX: 11, VY: 11 }
    17) { IDX: B23, IDY: D0, VX: 11, VY: 11 }
    18) { IDX: B24, IDY: D1, VX: 12, VY: 12 }
    19) { IDX: B25, IDY: D1, VX: 12, VY: 12 }
    20) { IDX: B28, IDY: <null>, VX: 14, VY: -1 }
    21) { IDX: B29, IDY: <null>, VX: 14, VY: -1 }
    22) { IDX: B30, IDY: <null>, VX: 15, VY: -1 }
    23) { IDX: B31, IDY: <null>, VX: 15, VY: -1 }
    24) { IDX: B32, IDY: <null>, VX: 16, VY: -1 }
    25) { IDX: B33, IDY: <null>, VX: 16, VY: -1 }
    26) { IDX: B36, IDY: <null>, VX: <null>, VY: -1 }
    27) { IDX: B37, IDY: <null>, VX: <null>, VY: -1 }
    28) { IDX: B38, IDY: <null>, VX: 19, VY: -1 }
    29) { IDX: B39, IDY: <null>, VX: 19, VY: -1 }
10) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: B1, IDY: <null>, VX: 0, VY: -1 }
     2) { IDX: B4, IDY: <null>, VX: 2, VY: -1 }
     3) { IDX: B5, IDY: <null>, VX: 2, VY: -1 }
     4) { IDX: B6, IDY: <null>, VX: <null>, VY: -1 }
     5) { IDX: B7, IDY: <null>, VX: <null>, VY: -1 }
     6) { IDX: B8, IDY: <null>, VX: 4, VY: -1 }
     7) { IDX: B9, IDY: <null>, VX: 4, VY: -1 }
     8) { IDX: B12, IDY: <null>, VX: 6, VY: -1 }
     9) { IDX: B13, IDY: <null>, VX: 6, VY: -1 }
    10) { IDX: B14, IDY: <null>, VX: 7, VY: -1 }
    11) { IDX: B15, IDY: <null>, VX: 7, VY: -1 }
    12) { IDX: B16, IDY: <null>, VX: <null>, VY: -1 }
    13) { IDX: B17, IDY: <null>, VX: <null>, VY: -1 }
    14) { IDX: B20, IDY: <null>, VX: 10, VY: -1 }
    15) { IDX: B21, IDY: <null>, VX: 10, VY: -1 }
    16) { IDX: B22, IDY: <null>, VX: 11, VY: -1 }
    17) { IDX: B23, IDY: <null>, VX: 11, VY: -1 }
    18) { IDX: B24, IDY: <null>, VX: 12, VY: -1 }
    19) { IDX: B25, IDY: <null>, VX: 12, VY: -1 }
    20) { IDX: B28, IDY: <null>, VX: 14, VY: -1 }
    21) { IDX: B29, IDY: <null>, VX: 14, VY: -1 }
    22) { IDX: B30, IDY: <null>, VX: 15, VY: -1 }
    23) { IDX: B31, IDY: <null>, VX: 15, VY: -1 }
    24) { IDX: B32, IDY: <null>, VX: 16, VY: -1 }
    25) { IDX: B33, IDY: <null>, VX: 16, VY: -1 }
    26) { IDX: B36, IDY: <null>, VX: <null>, VY: -1 }
    27) { IDX: B37, IDY: <null>, VX: <null>, VY: -1 }
    28) { IDX: B38, IDY: <null>, VX: 19, VY: -1 }
    29) { IDX: B39, IDY: <null>, VX: 19, VY: -1 }
11) <null>
12) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: A3, VX: <null>, VY: <null> }
     1) { IDX: C0, IDY: A10, VX: <null>, VY: <null> }
     2) { IDX: C1, IDY: A3, VX: <null>, VY: <null> }
     3) { IDX: C1, IDY: A10, VX: <null>, VY: <null> }
     4) { IDX: C2, IDY: A3, VX: <null>, VY: <null> }
     5) { IDX: C2, IDY: A10, VX: <null>, VY: <null> }
13) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: B6, VX: <null>, VY: <null> }
     1) { IDX: C0, IDY: B7, VX: <null>, VY: <null> }
     2) { IDX: C0, IDY: B16, VX: <null>, VY: <null> }
     3) { IDX: C0, IDY: B17, VX: <null>, VY: <null> }
     4) { IDX: C0, IDY: B36, VX: <null>, VY: <null> }
     5) { IDX: C0, IDY: B37, VX: <null>, VY: <null> }
     6) { IDX: C1, IDY: B6, VX: <null>, VY: <null> }
     7) { IDX: C1, IDY: B7, VX: <null>, VY: <null> }
     8) { IDX: C1, IDY: B16, VX: <null>, VY: <null> }
     9) { IDX: C1, IDY: B17, VX: <null>, VY: <null> }
    10) { IDX: C1, IDY: B36, VX: <null>, VY: <null> }
    11) { IDX: C1, IDY: B37, VX: <null>, VY: <null> }
    12) { IDX: C2, IDY: B6, VX: <null>, VY: <null> }
    13) { IDX: C2, IDY: B7, VX: <null>, VY: <null> }
    14) { IDX: C2, IDY: B16, VX: <null>, VY: <null> }
    15) { IDX: C2, IDY: B17, VX: <null>, VY: <null> }
    16) { IDX: C2, IDY: B36, VX: <null>, VY: <null> }
    17) { IDX: C2, IDY: B37, VX: <null>, VY: <null> }
14) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: C0, VX: <null>, VY: <null> }
     1) { IDX: C0, IDY: C1, VX: <null>, VY: <null> }
     2) { IDX: C0, IDY: C2, VX: <null>, VY: <null> }
     3) { IDX: C1, IDY: C0, VX: <null>, VY: <null> }
     4) { IDX: C1, IDY: C1, VX: <null>, VY: <null> }
     5) { IDX: C1, IDY: C2, VX: <null>, VY: <null> }
     6) { IDX: C2, IDY: C0, VX: <null>, VY: <null> }
     7) { IDX: C2, IDY: C1, VX: <null>, VY: <null> }
     8) { IDX: C2, IDY: C2, VX: <null>, VY: <null> }
15) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: <null>, VX: <null>, VY: -1 }
     1) { IDX: C1, IDY: <null>, VX: <null>, VY: -1 }
     2) { IDX: C2, IDY: <null>, VX: <null>, VY: -1 }
16) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: <null>, VX: <null>, VY: -1 }
     1) { IDX: C1, IDY: <null>, VX: <null>, VY: -1 }
     2) { IDX: C2, IDY: <null>, VX: <null>, VY: -1 }
17) <null>
18) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: <null>, VX: 11, VY: -1 }
     1) { IDX: D1, IDY: A12, VX: 12, VY: 12 }
     2) { IDX: D2, IDY: A13, VX: 13, VY: 13 }
19) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: B22, VX: 11, VY: 11 }
     1) { IDX: D0, IDY: B23, VX: 11, VY: 11 }
     2) { IDX: D1, IDY: B24, VX: 12, VY: 12 }
     3) { IDX: D1, IDY: B25, VX: 12, VY: 12 }
     4) { IDX: D2, IDY: <null>, VX: 13, VY: -1 }
20) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: <null>, VX: 11, VY: -1 }
     1) { IDX: D1, IDY: <null>, VX: 12, VY: -1 }
     2) { IDX: D2, IDY: <null>, VX: 13, VY: -1 }
21) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: D0, VX: 11, VY: 11 }
     1) { IDX: D1, IDY: D1, VX: 12, VY: 12 }
     2) { IDX: D2, IDY: D2, VX: 13, VY: 13 }
22) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: <null>, VX: 11, VY: -1 }
     1) { IDX: D1, IDY: <null>, VX: 12, VY: -1 }
     2) { IDX: D2, IDY: <null>, VX: 13, VY: -1 }
23) <null>
24) Sequence: Seq<{str,str,i8,i8}>
25) Sequence: Seq<{str,str,i8,i8}>
26) Sequence: Seq<{str,str,i8,i8}>
27) Sequence: Seq<{str,str,i8,i8}>
28) Sequence: Seq<{str,str,i8,i8}>
29) <null>
30) <null>
31) <null>
32) <null>
33) <null>
34) <null>
35) <null>
*** Ctx ping count: 3074
    [0:2](3025=275+2750): CrossJoin(*3: *1x, *4: *2x, Test.Wrap(*3.V @= *4.V), {IDX:*3.ID, IDY:*4.ID, VX:*3.V, VY:*4.V}, {IDX:*3.ID, VX:*3.V, VY:Opt<i8?>(-1)[, IDY:str(<null>)]})
    [2:4](49=7+42): CrossJoin(*1: XS, *2: YS, true, CrossJoin(*3: *1, *4: *2, Test.Wrap(*3.V @= *4.V), {IDX:*3.ID, IDY:*4.ID, VX:*3.V, VY:*4.V}, {IDX:*3.ID, VX:*3.V, VY:Opt<i8?>(-1)[, IDY:str(<null>)]}))
###
> CrossJoin(X:XS, Y:YS, true, CrossJoin(x:X, y:Y,      x.V  = y.V , { IDX:x.ID, IDY:y.ID, VX:x.V, VY:y.V }, { IDX:ID, VX:V, VY:-1 }))
CrossJoin(X : XS, Y : YS, true, CrossJoin(x : X, y : Y, x.V @= y.V, { IDX : x.ID, IDY : y.ID, VX : x.V, VY : y.V }, { IDX : ID, VX : V, VY : -1 })) : {IDX:s, IDY:s, VX:i8?, VY:i8?}**
BndKind:Call, Type:{IDX:s, IDY:s, VX:i8?, VY:i8?}**, Bnd:(Call(∂.CrossJoin([map:1] Global(XS), [map:2] Global(YS), true:b, Call(∂.KeyJoin([map:3] Scope(1), [map:4] Scope(2), [=] GetField(Scope(3), V), GetField(Scope(4), V), {IDX:GetField(Scope(3), ID), IDY:GetField(Scope(4), ID), VX:GetField(Scope(3), V), VY:GetField(Scope(4), V)}, {IDX:GetField(Scope(3), ID), VX:GetField(Scope(3), V), VY:Opt<i8?>(-1:i8)[, IDY:str(<null>)]})))))
// (<ctx>, ∂.XS:{ID:s, V:i8?}**, ∂.YS:{ID:s, V:i8?}**) : {IDX:s, IDY:s, VX:i8?, VY:i8?}**
CrossJoin_2(Arr<obj>, Seq<{str,i8}>, Seq<{str,i8}>):bool
      1) ldc.i4.1
      1) ret
  Total Size: 2

KeyJoin_2(Arr<obj>, {str,i8}):Opt<i8>
      1) ldarg.1 [{str,i8}]
      1) dup
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      5) ldfld {str,i8}::_F1:i8
      5) newobj Opt<i8>(i8)
      5) br [1]
  Label [0]:
      1) pop
      5) call static CodeGenUtil::GetDefault():Opt<i8>
  Label [1]:
      1) ret
  Total Size: 36

KeyJoin_3(Arr<obj>, {str,i8}):Opt<i8>
      1) ldarg.1 [{str,i8}]
      1) dup
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      5) ldfld {str,i8}::_F1:i8
      5) newobj Opt<i8>(i8)
      5) br [1]
  Label [0]:
      1) pop
      5) call static CodeGenUtil::GetDefault():Opt<i8>
  Label [1]:
      1) ret
  Total Size: 36

KeyJoin_4(Arr<obj>, {str,i8}, {str,i8}):{str,str,i8,i8}
      5) newobj {str,str,i8,i8}()
      1) dup
      1) ldc.i4.3
      5) stfld {str,str,i8,i8}::_B0:u1
      1) stloc.0 [{str,str,i8,i8}]
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F0:str
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F1:str
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.4
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F1:i8
      5) stfld {str,str,i8,i8}::_F2:i8
  Label [0]:
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [1]
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.8
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F1:i8
      5) stfld {str,str,i8,i8}::_F3:i8
  Label [1]:
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 130

KeyJoin_5(Arr<obj>, {str,i8}):{str,str,i8,i8}
      5) newobj {str,str,i8,i8}()
      1) dup
      1) ldc.i4.3
      5) stfld {str,str,i8,i8}::_B0:u1
      1) stloc.0 [{str,str,i8,i8}]
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F0:str
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.4
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F1:i8
      5) stfld {str,str,i8,i8}::_F2:i8
  Label [0]:
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldc.i4.m1
      1) conv.i8
      5) stfld {str,str,i8,i8}::_F3:i8
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.8
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 101

CrossJoin_3(Arr<obj>, Seq<{str,i8}>, Seq<{str,i8}>):Seq<{str,str,i8,i8}>
      1) ldarg.1 [Seq<{str,i8}>]
      1) ldarg.2 [Seq<{str,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<{str,i8},Opt<i8>>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [Func<{str,i8},Opt<i8>>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Func<{str,i8},{str,i8},{str,str,i8,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.3
      5) ldelem [Func<{str,i8},{str,str,i8,i8}>]
      1) ldnull
      1) ldnull
      1) ldc.i4.0
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [ExecCtx]
      1) ldc.i4.0
      5) call static KeyJoinGen::Exec(Seq<{str,i8}>, Seq<{str,i8}>, Func<{str,i8},Opt<i8>>, Func<{str,i8},Opt<i8>>, Func<{str,i8},{str,i8},{str,str,i8,i8}>, Func<{str,i8},{str,str,i8,i8}>, Func<{str,i8},{str,str,i8,i8}>, EqualityComparer<Opt<i8>>, bool, ExecCtx, i4):Seq<{str,str,i8,i8}>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<{str,str,i8,i8}>):Seq<{str,str,i8,i8}>
      1) ret
  Total Size: 76

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):ExecCtx
      1) stloc.0 [ExecCtx]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<Seq<{str,i8}>>
      1) stloc.1 [Seq<Seq<{str,i8}>>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.2
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<Seq<{str,i8}>>
      1) stloc.2 [Seq<Seq<{str,i8}>>]
      1) ldloc.1 [Seq<Seq<{str,i8}>>]
      1) ldloc.2 [Seq<Seq<{str,i8}>>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<Seq<{str,i8}>,Seq<{str,i8}>,bool>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [MethodInfo]
      5) ldtoken [Func<Seq<{str,i8}>,Seq<{str,i8}>,Seq<{str,str,i8,i8}>>]
      5) call static Type::GetTypeFromHandle(RuntimeTypeHandle):Type
      1) ldc.i4.2
      5) newarr [obj]
      1) dup
      1) ldc.i4.0
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Arr<obj>]
      5) stelem [Arr<obj>]
      1) dup
      1) ldc.i4.1
      1) ldloc.0 [ExecCtx]
      5) stelem [ExecCtx]
      5) callvirt DynamicMethod::CreateDelegate(Type, obj):Delegate
      1) ldloc.0 [ExecCtx]
      1) ldc.i4.3
      5) call static CrossJoinGen::Exec(Seq<Seq<{str,i8}>>, Seq<Seq<{str,i8}>>, Func<Seq<{str,i8}>,Seq<{str,i8}>,bool>, Func<Seq<{str,i8}>,Seq<{str,i8}>,Seq<{str,str,i8,i8}>>, ExecCtx, i4):Seq<Seq<{str,str,i8,i8}>>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<Seq<{str,str,i8,i8}>>):Seq<Seq<{str,str,i8,i8}>>
      1) ret
  Total Size: 99

Func sig: (<ctx>:x, XS:{ID:s, V:i8?}**, YS:{ID:s, V:i8?}**) to {IDX:s, IDY:s, VX:i8?, VY:i8?}**
Sequence: Seq<Seq<{str,str,i8,i8}>>
 0) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: A0, VX: 0, VY: 0 }
     1) { IDX: A1, IDY: A1, VX: 1, VY: 1 }
     2) { IDX: A3, IDY: A3, VX: <null>, VY: <null> }
     3) { IDX: A3, IDY: A10, VX: <null>, VY: <null> }
     4) { IDX: A4, IDY: A4, VX: 4, VY: 4 }
     5) { IDX: A6, IDY: A6, VX: 6, VY: 6 }
     6) { IDX: A7, IDY: A7, VX: 7, VY: 7 }
     7) { IDX: A9, IDY: A9, VX: 9, VY: 9 }
     8) { IDX: A10, IDY: A3, VX: <null>, VY: <null> }
     9) { IDX: A10, IDY: A10, VX: <null>, VY: <null> }
    10) { IDX: A12, IDY: A12, VX: 12, VY: 12 }
    11) { IDX: A13, IDY: A13, VX: 13, VY: 13 }
    12) { IDX: A15, IDY: A15, VX: 15, VY: 15 }
    13) { IDX: A16, IDY: A16, VX: 16, VY: 16 }
    14) { IDX: A18, IDY: A18, VX: 18, VY: 18 }
    15) { IDX: A19, IDY: A19, VX: 19, VY: 19 }
 1) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: B0, VX: 0, VY: 0 }
     1) { IDX: A0, IDY: B1, VX: 0, VY: 0 }
     2) { IDX: A1, IDY: <null>, VX: 1, VY: -1 }
     3) { IDX: A3, IDY: B6, VX: <null>, VY: <null> }
     4) { IDX: A3, IDY: B7, VX: <null>, VY: <null> }
     5) { IDX: A3, IDY: B16, VX: <null>, VY: <null> }
     6) { IDX: A3, IDY: B17, VX: <null>, VY: <null> }
     7) { IDX: A3, IDY: B36, VX: <null>, VY: <null> }
     8) { IDX: A3, IDY: B37, VX: <null>, VY: <null> }
     9) { IDX: A4, IDY: B8, VX: 4, VY: 4 }
    10) { IDX: A4, IDY: B9, VX: 4, VY: 4 }
    11) { IDX: A6, IDY: B12, VX: 6, VY: 6 }
    12) { IDX: A6, IDY: B13, VX: 6, VY: 6 }
    13) { IDX: A7, IDY: B14, VX: 7, VY: 7 }
    14) { IDX: A7, IDY: B15, VX: 7, VY: 7 }
    15) { IDX: A9, IDY: <null>, VX: 9, VY: -1 }
    16) { IDX: A10, IDY: B6, VX: <null>, VY: <null> }
    17) { IDX: A10, IDY: B7, VX: <null>, VY: <null> }
    18) { IDX: A10, IDY: B16, VX: <null>, VY: <null> }
    19) { IDX: A10, IDY: B17, VX: <null>, VY: <null> }
    20) { IDX: A10, IDY: B36, VX: <null>, VY: <null> }
    21) { IDX: A10, IDY: B37, VX: <null>, VY: <null> }
    22) { IDX: A12, IDY: B24, VX: 12, VY: 12 }
    23) { IDX: A12, IDY: B25, VX: 12, VY: 12 }
    24) { IDX: A13, IDY: <null>, VX: 13, VY: -1 }
    25) { IDX: A15, IDY: B30, VX: 15, VY: 15 }
    26) { IDX: A15, IDY: B31, VX: 15, VY: 15 }
    27) { IDX: A16, IDY: B32, VX: 16, VY: 16 }
    28) { IDX: A16, IDY: B33, VX: 16, VY: 16 }
    29) { IDX: A18, IDY: <null>, VX: 18, VY: -1 }
    30) { IDX: A19, IDY: B38, VX: 19, VY: 19 }
    31) { IDX: A19, IDY: B39, VX: 19, VY: 19 }
 2) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: A1, IDY: <null>, VX: 1, VY: -1 }
     2) { IDX: A3, IDY: C0, VX: <null>, VY: <null> }
     3) { IDX: A3, IDY: C1, VX: <null>, VY: <null> }
     4) { IDX: A3, IDY: C2, VX: <null>, VY: <null> }
     5) { IDX: A4, IDY: <null>, VX: 4, VY: -1 }
     6) { IDX: A6, IDY: <null>, VX: 6, VY: -1 }
     7) { IDX: A7, IDY: <null>, VX: 7, VY: -1 }
     8) { IDX: A9, IDY: <null>, VX: 9, VY: -1 }
     9) { IDX: A10, IDY: C0, VX: <null>, VY: <null> }
    10) { IDX: A10, IDY: C1, VX: <null>, VY: <null> }
    11) { IDX: A10, IDY: C2, VX: <null>, VY: <null> }
    12) { IDX: A12, IDY: <null>, VX: 12, VY: -1 }
    13) { IDX: A13, IDY: <null>, VX: 13, VY: -1 }
    14) { IDX: A15, IDY: <null>, VX: 15, VY: -1 }
    15) { IDX: A16, IDY: <null>, VX: 16, VY: -1 }
    16) { IDX: A18, IDY: <null>, VX: 18, VY: -1 }
    17) { IDX: A19, IDY: <null>, VX: 19, VY: -1 }
 3) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: A1, IDY: <null>, VX: 1, VY: -1 }
     2) { IDX: A3, IDY: <null>, VX: <null>, VY: -1 }
     3) { IDX: A4, IDY: <null>, VX: 4, VY: -1 }
     4) { IDX: A6, IDY: <null>, VX: 6, VY: -1 }
     5) { IDX: A7, IDY: <null>, VX: 7, VY: -1 }
     6) { IDX: A9, IDY: <null>, VX: 9, VY: -1 }
     7) { IDX: A10, IDY: <null>, VX: <null>, VY: -1 }
     8) { IDX: A12, IDY: D1, VX: 12, VY: 12 }
     9) { IDX: A13, IDY: D2, VX: 13, VY: 13 }
    10) { IDX: A15, IDY: <null>, VX: 15, VY: -1 }
    11) { IDX: A16, IDY: <null>, VX: 16, VY: -1 }
    12) { IDX: A18, IDY: <null>, VX: 18, VY: -1 }
    13) { IDX: A19, IDY: <null>, VX: 19, VY: -1 }
 4) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: A1, IDY: <null>, VX: 1, VY: -1 }
     2) { IDX: A3, IDY: <null>, VX: <null>, VY: -1 }
     3) { IDX: A4, IDY: <null>, VX: 4, VY: -1 }
     4) { IDX: A6, IDY: <null>, VX: 6, VY: -1 }
     5) { IDX: A7, IDY: <null>, VX: 7, VY: -1 }
     6) { IDX: A9, IDY: <null>, VX: 9, VY: -1 }
     7) { IDX: A10, IDY: <null>, VX: <null>, VY: -1 }
     8) { IDX: A12, IDY: <null>, VX: 12, VY: -1 }
     9) { IDX: A13, IDY: <null>, VX: 13, VY: -1 }
    10) { IDX: A15, IDY: <null>, VX: 15, VY: -1 }
    11) { IDX: A16, IDY: <null>, VX: 16, VY: -1 }
    12) { IDX: A18, IDY: <null>, VX: 18, VY: -1 }
    13) { IDX: A19, IDY: <null>, VX: 19, VY: -1 }
 5) <null>
 6) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: A0, VX: 0, VY: 0 }
     1) { IDX: B1, IDY: A0, VX: 0, VY: 0 }
     2) { IDX: B4, IDY: <null>, VX: 2, VY: -1 }
     3) { IDX: B5, IDY: <null>, VX: 2, VY: -1 }
     4) { IDX: B6, IDY: A3, VX: <null>, VY: <null> }
     5) { IDX: B6, IDY: A10, VX: <null>, VY: <null> }
     6) { IDX: B7, IDY: A3, VX: <null>, VY: <null> }
     7) { IDX: B7, IDY: A10, VX: <null>, VY: <null> }
     8) { IDX: B8, IDY: A4, VX: 4, VY: 4 }
     9) { IDX: B9, IDY: A4, VX: 4, VY: 4 }
    10) { IDX: B12, IDY: A6, VX: 6, VY: 6 }
    11) { IDX: B13, IDY: A6, VX: 6, VY: 6 }
    12) { IDX: B14, IDY: A7, VX: 7, VY: 7 }
    13) { IDX: B15, IDY: A7, VX: 7, VY: 7 }
    14) { IDX: B16, IDY: A3, VX: <null>, VY: <null> }
    15) { IDX: B16, IDY: A10, VX: <null>, VY: <null> }
    16) { IDX: B17, IDY: A3, VX: <null>, VY: <null> }
    17) { IDX: B17, IDY: A10, VX: <null>, VY: <null> }
    18) { IDX: B20, IDY: <null>, VX: 10, VY: -1 }
    19) { IDX: B21, IDY: <null>, VX: 10, VY: -1 }
    20) { IDX: B22, IDY: <null>, VX: 11, VY: -1 }
    21) { IDX: B23, IDY: <null>, VX: 11, VY: -1 }
    22) { IDX: B24, IDY: A12, VX: 12, VY: 12 }
    23) { IDX: B25, IDY: A12, VX: 12, VY: 12 }
    24) { IDX: B28, IDY: <null>, VX: 14, VY: -1 }
    25) { IDX: B29, IDY: <null>, VX: 14, VY: -1 }
    26) { IDX: B30, IDY: A15, VX: 15, VY: 15 }
    27) { IDX: B31, IDY: A15, VX: 15, VY: 15 }
    28) { IDX: B32, IDY: A16, VX: 16, VY: 16 }
    29) { IDX: B33, IDY: A16, VX: 16, VY: 16 }
    30) { IDX: B36, IDY: A3, VX: <null>, VY: <null> }
    31) { IDX: B36, IDY: A10, VX: <null>, VY: <null> }
    32) { IDX: B37, IDY: A3, VX: <null>, VY: <null> }
    33) { IDX: B37, IDY: A10, VX: <null>, VY: <null> }
    34) { IDX: B38, IDY: A19, VX: 19, VY: 19 }
    35) { IDX: B39, IDY: A19, VX: 19, VY: 19 }
 7) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: B0, VX: 0, VY: 0 }
     1) { IDX: B0, IDY: B1, VX: 0, VY: 0 }
     2) { IDX: B1, IDY: B0, VX: 0, VY: 0 }
     3) { IDX: B1, IDY: B1, VX: 0, VY: 0 }
     4) { IDX: B4, IDY: B4, VX: 2, VY: 2 }
     5) { IDX: B4, IDY: B5, VX: 2, VY: 2 }
     6) { IDX: B5, IDY: B4, VX: 2, VY: 2 }
     7) { IDX: B5, IDY: B5, VX: 2, VY: 2 }
     8) { IDX: B6, IDY: B6, VX: <null>, VY: <null> }
     9) { IDX: B6, IDY: B7, VX: <null>, VY: <null> }
    10) { IDX: B6, IDY: B16, VX: <null>, VY: <null> }
    11) { IDX: B6, IDY: B17, VX: <null>, VY: <null> }
    12) { IDX: B6, IDY: B36, VX: <null>, VY: <null> }
    13) { IDX: B6, IDY: B37, VX: <null>, VY: <null> }
    14) { IDX: B7, IDY: B6, VX: <null>, VY: <null> }
    15) { IDX: B7, IDY: B7, VX: <null>, VY: <null> }
    16) { IDX: B7, IDY: B16, VX: <null>, VY: <null> }
    17) { IDX: B7, IDY: B17, VX: <null>, VY: <null> }
    18) { IDX: B7, IDY: B36, VX: <null>, VY: <null> }
    19) { IDX: B7, IDY: B37, VX: <null>, VY: <null> }
    20) { IDX: B8, IDY: B8, VX: 4, VY: 4 }
    21) { IDX: B8, IDY: B9, VX: 4, VY: 4 }
    22) { IDX: B9, IDY: B8, VX: 4, VY: 4 }
    23) { IDX: B9, IDY: B9, VX: 4, VY: 4 }
    24) { IDX: B12, IDY: B12, VX: 6, VY: 6 }
    25) { IDX: B12, IDY: B13, VX: 6, VY: 6 }
    26) { IDX: B13, IDY: B12, VX: 6, VY: 6 }
    27) { IDX: B13, IDY: B13, VX: 6, VY: 6 }
    28) { IDX: B14, IDY: B14, VX: 7, VY: 7 }
    29) { IDX: B14, IDY: B15, VX: 7, VY: 7 }
    30) { IDX: B15, IDY: B14, VX: 7, VY: 7 }
    31) { IDX: B15, IDY: B15, VX: 7, VY: 7 }
    32) { IDX: B16, IDY: B6, VX: <null>, VY: <null> }
    33) { IDX: B16, IDY: B7, VX: <null>, VY: <null> }
    34) { IDX: B16, IDY: B16, VX: <null>, VY: <null> }
    35) { IDX: B16, IDY: B17, VX: <null>, VY: <null> }
    36) { IDX: B16, IDY: B36, VX: <null>, VY: <null> }
    37) { IDX: B16, IDY: B37, VX: <null>, VY: <null> }
    38) { IDX: B17, IDY: B6, VX: <null>, VY: <null> }
    39) { IDX: B17, IDY: B7, VX: <null>, VY: <null> }
    40) { IDX: B17, IDY: B16, VX: <null>, VY: <null> }
    41) { IDX: B17, IDY: B17, VX: <null>, VY: <null> }
    42) { IDX: B17, IDY: B36, VX: <null>, VY: <null> }
    43) { IDX: B17, IDY: B37, VX: <null>, VY: <null> }
    44) { IDX: B20, IDY: B20, VX: 10, VY: 10 }
    45) { IDX: B20, IDY: B21, VX: 10, VY: 10 }
    46) { IDX: B21, IDY: B20, VX: 10, VY: 10 }
    47) { IDX: B21, IDY: B21, VX: 10, VY: 10 }
    48) { IDX: B22, IDY: B22, VX: 11, VY: 11 }
    49) { IDX: B22, IDY: B23, VX: 11, VY: 11 }
    50) { IDX: B23, IDY: B22, VX: 11, VY: 11 }
    51) { IDX: B23, IDY: B23, VX: 11, VY: 11 }
    52) { IDX: B24, IDY: B24, VX: 12, VY: 12 }
    53) { IDX: B24, IDY: B25, VX: 12, VY: 12 }
    54) { IDX: B25, IDY: B24, VX: 12, VY: 12 }
    55) { IDX: B25, IDY: B25, VX: 12, VY: 12 }
    56) { IDX: B28, IDY: B28, VX: 14, VY: 14 }
    57) { IDX: B28, IDY: B29, VX: 14, VY: 14 }
    58) { IDX: B29, IDY: B28, VX: 14, VY: 14 }
    59) { IDX: B29, IDY: B29, VX: 14, VY: 14 }
    60) { IDX: B30, IDY: B30, VX: 15, VY: 15 }
    61) { IDX: B30, IDY: B31, VX: 15, VY: 15 }
    62) { IDX: B31, IDY: B30, VX: 15, VY: 15 }
    63) { IDX: B31, IDY: B31, VX: 15, VY: 15 }
    64) { IDX: B32, IDY: B32, VX: 16, VY: 16 }
    65) { IDX: B32, IDY: B33, VX: 16, VY: 16 }
    66) { IDX: B33, IDY: B32, VX: 16, VY: 16 }
    67) { IDX: B33, IDY: B33, VX: 16, VY: 16 }
    68) { IDX: B36, IDY: B6, VX: <null>, VY: <null> }
    69) { IDX: B36, IDY: B7, VX: <null>, VY: <null> }
    70) { IDX: B36, IDY: B16, VX: <null>, VY: <null> }
    71) { IDX: B36, IDY: B17, VX: <null>, VY: <null> }
    72) { IDX: B36, IDY: B36, VX: <null>, VY: <null> }
    73) { IDX: B36, IDY: B37, VX: <null>, VY: <null> }
    74) { IDX: B37, IDY: B6, VX: <null>, VY: <null> }
    75) { IDX: B37, IDY: B7, VX: <null>, VY: <null> }
    76) { IDX: B37, IDY: B16, VX: <null>, VY: <null> }
    77) { IDX: B37, IDY: B17, VX: <null>, VY: <null> }
    78) { IDX: B37, IDY: B36, VX: <null>, VY: <null> }
    79) { IDX: B37, IDY: B37, VX: <null>, VY: <null> }
    80) { IDX: B38, IDY: B38, VX: 19, VY: 19 }
    81) { IDX: B38, IDY: B39, VX: 19, VY: 19 }
    82) { IDX: B39, IDY: B38, VX: 19, VY: 19 }
    83) { IDX: B39, IDY: B39, VX: 19, VY: 19 }
 8) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: B1, IDY: <null>, VX: 0, VY: -1 }
     2) { IDX: B4, IDY: <null>, VX: 2, VY: -1 }
     3) { IDX: B5, IDY: <null>, VX: 2, VY: -1 }
     4) { IDX: B6, IDY: C0, VX: <null>, VY: <null> }
     5) { IDX: B6, IDY: C1, VX: <null>, VY: <null> }
     6) { IDX: B6, IDY: C2, VX: <null>, VY: <null> }
     7) { IDX: B7, IDY: C0, VX: <null>, VY: <null> }
     8) { IDX: B7, IDY: C1, VX: <null>, VY: <null> }
     9) { IDX: B7, IDY: C2, VX: <null>, VY: <null> }
    10) { IDX: B8, IDY: <null>, VX: 4, VY: -1 }
    11) { IDX: B9, IDY: <null>, VX: 4, VY: -1 }
    12) { IDX: B12, IDY: <null>, VX: 6, VY: -1 }
    13) { IDX: B13, IDY: <null>, VX: 6, VY: -1 }
    14) { IDX: B14, IDY: <null>, VX: 7, VY: -1 }
    15) { IDX: B15, IDY: <null>, VX: 7, VY: -1 }
    16) { IDX: B16, IDY: C0, VX: <null>, VY: <null> }
    17) { IDX: B16, IDY: C1, VX: <null>, VY: <null> }
    18) { IDX: B16, IDY: C2, VX: <null>, VY: <null> }
    19) { IDX: B17, IDY: C0, VX: <null>, VY: <null> }
    20) { IDX: B17, IDY: C1, VX: <null>, VY: <null> }
    21) { IDX: B17, IDY: C2, VX: <null>, VY: <null> }
    22) { IDX: B20, IDY: <null>, VX: 10, VY: -1 }
    23) { IDX: B21, IDY: <null>, VX: 10, VY: -1 }
    24) { IDX: B22, IDY: <null>, VX: 11, VY: -1 }
    25) { IDX: B23, IDY: <null>, VX: 11, VY: -1 }
    26) { IDX: B24, IDY: <null>, VX: 12, VY: -1 }
    27) { IDX: B25, IDY: <null>, VX: 12, VY: -1 }
    28) { IDX: B28, IDY: <null>, VX: 14, VY: -1 }
    29) { IDX: B29, IDY: <null>, VX: 14, VY: -1 }
    30) { IDX: B30, IDY: <null>, VX: 15, VY: -1 }
    31) { IDX: B31, IDY: <null>, VX: 15, VY: -1 }
    32) { IDX: B32, IDY: <null>, VX: 16, VY: -1 }
    33) { IDX: B33, IDY: <null>, VX: 16, VY: -1 }
    34) { IDX: B36, IDY: C0, VX: <null>, VY: <null> }
    35) { IDX: B36, IDY: C1, VX: <null>, VY: <null> }
    36) { IDX: B36, IDY: C2, VX: <null>, VY: <null> }
    37) { IDX: B37, IDY: C0, VX: <null>, VY: <null> }
    38) { IDX: B37, IDY: C1, VX: <null>, VY: <null> }
    39) { IDX: B37, IDY: C2, VX: <null>, VY: <null> }
    40) { IDX: B38, IDY: <null>, VX: 19, VY: -1 }
    41) { IDX: B39, IDY: <null>, VX: 19, VY: -1 }
 9) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: B1, IDY: <null>, VX: 0, VY: -1 }
     2) { IDX: B4, IDY: <null>, VX: 2, VY: -1 }
     3) { IDX: B5, IDY: <null>, VX: 2, VY: -1 }
     4) { IDX: B6, IDY: <null>, VX: <null>, VY: -1 }
     5) { IDX: B7, IDY: <null>, VX: <null>, VY: -1 }
     6) { IDX: B8, IDY: <null>, VX: 4, VY: -1 }
     7) { IDX: B9, IDY: <null>, VX: 4, VY: -1 }
     8) { IDX: B12, IDY: <null>, VX: 6, VY: -1 }
     9) { IDX: B13, IDY: <null>, VX: 6, VY: -1 }
    10) { IDX: B14, IDY: <null>, VX: 7, VY: -1 }
    11) { IDX: B15, IDY: <null>, VX: 7, VY: -1 }
    12) { IDX: B16, IDY: <null>, VX: <null>, VY: -1 }
    13) { IDX: B17, IDY: <null>, VX: <null>, VY: -1 }
    14) { IDX: B20, IDY: <null>, VX: 10, VY: -1 }
    15) { IDX: B21, IDY: <null>, VX: 10, VY: -1 }
    16) { IDX: B22, IDY: D0, VX: 11, VY: 11 }
    17) { IDX: B23, IDY: D0, VX: 11, VY: 11 }
    18) { IDX: B24, IDY: D1, VX: 12, VY: 12 }
    19) { IDX: B25, IDY: D1, VX: 12, VY: 12 }
    20) { IDX: B28, IDY: <null>, VX: 14, VY: -1 }
    21) { IDX: B29, IDY: <null>, VX: 14, VY: -1 }
    22) { IDX: B30, IDY: <null>, VX: 15, VY: -1 }
    23) { IDX: B31, IDY: <null>, VX: 15, VY: -1 }
    24) { IDX: B32, IDY: <null>, VX: 16, VY: -1 }
    25) { IDX: B33, IDY: <null>, VX: 16, VY: -1 }
    26) { IDX: B36, IDY: <null>, VX: <null>, VY: -1 }
    27) { IDX: B37, IDY: <null>, VX: <null>, VY: -1 }
    28) { IDX: B38, IDY: <null>, VX: 19, VY: -1 }
    29) { IDX: B39, IDY: <null>, VX: 19, VY: -1 }
10) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: B1, IDY: <null>, VX: 0, VY: -1 }
     2) { IDX: B4, IDY: <null>, VX: 2, VY: -1 }
     3) { IDX: B5, IDY: <null>, VX: 2, VY: -1 }
     4) { IDX: B6, IDY: <null>, VX: <null>, VY: -1 }
     5) { IDX: B7, IDY: <null>, VX: <null>, VY: -1 }
     6) { IDX: B8, IDY: <null>, VX: 4, VY: -1 }
     7) { IDX: B9, IDY: <null>, VX: 4, VY: -1 }
     8) { IDX: B12, IDY: <null>, VX: 6, VY: -1 }
     9) { IDX: B13, IDY: <null>, VX: 6, VY: -1 }
    10) { IDX: B14, IDY: <null>, VX: 7, VY: -1 }
    11) { IDX: B15, IDY: <null>, VX: 7, VY: -1 }
    12) { IDX: B16, IDY: <null>, VX: <null>, VY: -1 }
    13) { IDX: B17, IDY: <null>, VX: <null>, VY: -1 }
    14) { IDX: B20, IDY: <null>, VX: 10, VY: -1 }
    15) { IDX: B21, IDY: <null>, VX: 10, VY: -1 }
    16) { IDX: B22, IDY: <null>, VX: 11, VY: -1 }
    17) { IDX: B23, IDY: <null>, VX: 11, VY: -1 }
    18) { IDX: B24, IDY: <null>, VX: 12, VY: -1 }
    19) { IDX: B25, IDY: <null>, VX: 12, VY: -1 }
    20) { IDX: B28, IDY: <null>, VX: 14, VY: -1 }
    21) { IDX: B29, IDY: <null>, VX: 14, VY: -1 }
    22) { IDX: B30, IDY: <null>, VX: 15, VY: -1 }
    23) { IDX: B31, IDY: <null>, VX: 15, VY: -1 }
    24) { IDX: B32, IDY: <null>, VX: 16, VY: -1 }
    25) { IDX: B33, IDY: <null>, VX: 16, VY: -1 }
    26) { IDX: B36, IDY: <null>, VX: <null>, VY: -1 }
    27) { IDX: B37, IDY: <null>, VX: <null>, VY: -1 }
    28) { IDX: B38, IDY: <null>, VX: 19, VY: -1 }
    29) { IDX: B39, IDY: <null>, VX: 19, VY: -1 }
11) <null>
12) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: A3, VX: <null>, VY: <null> }
     1) { IDX: C0, IDY: A10, VX: <null>, VY: <null> }
     2) { IDX: C1, IDY: A3, VX: <null>, VY: <null> }
     3) { IDX: C1, IDY: A10, VX: <null>, VY: <null> }
     4) { IDX: C2, IDY: A3, VX: <null>, VY: <null> }
     5) { IDX: C2, IDY: A10, VX: <null>, VY: <null> }
13) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: B6, VX: <null>, VY: <null> }
     1) { IDX: C0, IDY: B7, VX: <null>, VY: <null> }
     2) { IDX: C0, IDY: B16, VX: <null>, VY: <null> }
     3) { IDX: C0, IDY: B17, VX: <null>, VY: <null> }
     4) { IDX: C0, IDY: B36, VX: <null>, VY: <null> }
     5) { IDX: C0, IDY: B37, VX: <null>, VY: <null> }
     6) { IDX: C1, IDY: B6, VX: <null>, VY: <null> }
     7) { IDX: C1, IDY: B7, VX: <null>, VY: <null> }
     8) { IDX: C1, IDY: B16, VX: <null>, VY: <null> }
     9) { IDX: C1, IDY: B17, VX: <null>, VY: <null> }
    10) { IDX: C1, IDY: B36, VX: <null>, VY: <null> }
    11) { IDX: C1, IDY: B37, VX: <null>, VY: <null> }
    12) { IDX: C2, IDY: B6, VX: <null>, VY: <null> }
    13) { IDX: C2, IDY: B7, VX: <null>, VY: <null> }
    14) { IDX: C2, IDY: B16, VX: <null>, VY: <null> }
    15) { IDX: C2, IDY: B17, VX: <null>, VY: <null> }
    16) { IDX: C2, IDY: B36, VX: <null>, VY: <null> }
    17) { IDX: C2, IDY: B37, VX: <null>, VY: <null> }
14) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: C0, VX: <null>, VY: <null> }
     1) { IDX: C0, IDY: C1, VX: <null>, VY: <null> }
     2) { IDX: C0, IDY: C2, VX: <null>, VY: <null> }
     3) { IDX: C1, IDY: C0, VX: <null>, VY: <null> }
     4) { IDX: C1, IDY: C1, VX: <null>, VY: <null> }
     5) { IDX: C1, IDY: C2, VX: <null>, VY: <null> }
     6) { IDX: C2, IDY: C0, VX: <null>, VY: <null> }
     7) { IDX: C2, IDY: C1, VX: <null>, VY: <null> }
     8) { IDX: C2, IDY: C2, VX: <null>, VY: <null> }
15) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: <null>, VX: <null>, VY: -1 }
     1) { IDX: C1, IDY: <null>, VX: <null>, VY: -1 }
     2) { IDX: C2, IDY: <null>, VX: <null>, VY: -1 }
16) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: <null>, VX: <null>, VY: -1 }
     1) { IDX: C1, IDY: <null>, VX: <null>, VY: -1 }
     2) { IDX: C2, IDY: <null>, VX: <null>, VY: -1 }
17) <null>
18) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: <null>, VX: 11, VY: -1 }
     1) { IDX: D1, IDY: A12, VX: 12, VY: 12 }
     2) { IDX: D2, IDY: A13, VX: 13, VY: 13 }
19) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: B22, VX: 11, VY: 11 }
     1) { IDX: D0, IDY: B23, VX: 11, VY: 11 }
     2) { IDX: D1, IDY: B24, VX: 12, VY: 12 }
     3) { IDX: D1, IDY: B25, VX: 12, VY: 12 }
     4) { IDX: D2, IDY: <null>, VX: 13, VY: -1 }
20) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: <null>, VX: 11, VY: -1 }
     1) { IDX: D1, IDY: <null>, VX: 12, VY: -1 }
     2) { IDX: D2, IDY: <null>, VX: 13, VY: -1 }
21) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: D0, VX: 11, VY: 11 }
     1) { IDX: D1, IDY: D1, VX: 12, VY: 12 }
     2) { IDX: D2, IDY: D2, VX: 13, VY: 13 }
22) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: <null>, VX: 11, VY: -1 }
     1) { IDX: D1, IDY: <null>, VX: 12, VY: -1 }
     2) { IDX: D2, IDY: <null>, VX: 13, VY: -1 }
23) <null>
24) Sequence: Seq<{str,str,i8,i8}>
25) Sequence: Seq<{str,str,i8,i8}>
26) Sequence: Seq<{str,str,i8,i8}>
27) Sequence: Seq<{str,str,i8,i8}>
28) Sequence: Seq<{str,str,i8,i8}>
29) <null>
30) <null>
31) <null>
32) <null>
33) <null>
34) <null>
35) <null>
*** Ctx ping count: 229
    [0:3](180=0+0+180): KeyJoin(*3: *1x, *4: *2x, [=] *3.V, *4.V, {IDX:*3.ID, IDY:*4.ID, VX:*3.V, VY:*4.V}, {IDX:*3.ID, VX:*3.V, VY:Opt<i8?>(-1)[, IDY:str(<null>)]})
    [3:5](49=7+42): CrossJoin(*1: XS, *2: YS, true, KeyJoin(*3: *1, *4: *2, [=] *3.V, *4.V, {IDX:*3.ID, IDY:*4.ID, VX:*3.V, VY:*4.V}, {IDX:*3.ID, VX:*3.V, VY:Opt<i8?>(-1)[, IDY:str(<null>)]}))
###
> CrossJoin(X:XS, Y:YS, true, CrossJoin(x:X, y:Y,      x.V $= y.V , { IDX:x.ID, IDY:y.ID, VX:x.V, VY:y.V }, { IDX:ID, VX:V, VY:-1 }))
CrossJoin(X : XS, Y : YS, true, CrossJoin(x : X, y : Y, x.V $= y.V, { IDX : x.ID, IDY : y.ID, VX : x.V, VY : y.V }, { IDX : ID, VX : V, VY : -1 })) : {IDX:s, IDY:s, VX:i8?, VY:i8?}**
BndKind:Call, Type:{IDX:s, IDY:s, VX:i8?, VY:i8?}**, Bnd:(Call(∂.CrossJoin([map:1] Global(XS), [map:2] Global(YS), true:b, Call(∂.KeyJoin([map:3] Scope(1), [map:4] Scope(2), GetField(Scope(3), V), GetField(Scope(4), V), {IDX:GetField(Scope(3), ID), IDY:GetField(Scope(4), ID), VX:GetField(Scope(3), V), VY:GetField(Scope(4), V)}, {IDX:GetField(Scope(3), ID), VX:GetField(Scope(3), V), VY:Opt<i8?>(-1:i8)[, IDY:str(<null>)]})))))
// (<ctx>, ∂.XS:{ID:s, V:i8?}**, ∂.YS:{ID:s, V:i8?}**) : {IDX:s, IDY:s, VX:i8?, VY:i8?}**
CrossJoin_2(Arr<obj>, Seq<{str,i8}>, Seq<{str,i8}>):bool
      1) ldc.i4.1
      1) ret
  Total Size: 2

KeyJoin_2(Arr<obj>, {str,i8}):Opt<i8>
      1) ldarg.1 [{str,i8}]
      1) dup
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      5) ldfld {str,i8}::_F1:i8
      5) newobj Opt<i8>(i8)
      5) br [1]
  Label [0]:
      1) pop
      5) call static CodeGenUtil::GetDefault():Opt<i8>
  Label [1]:
      1) ret
  Total Size: 36

KeyJoin_3(Arr<obj>, {str,i8}):Opt<i8>
      1) ldarg.1 [{str,i8}]
      1) dup
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      5) ldfld {str,i8}::_F1:i8
      5) newobj Opt<i8>(i8)
      5) br [1]
  Label [0]:
      1) pop
      5) call static CodeGenUtil::GetDefault():Opt<i8>
  Label [1]:
      1) ret
  Total Size: 36

KeyJoin_4(Arr<obj>, {str,i8}, {str,i8}):{str,str,i8,i8}
      5) newobj {str,str,i8,i8}()
      1) dup
      1) ldc.i4.3
      5) stfld {str,str,i8,i8}::_B0:u1
      1) stloc.0 [{str,str,i8,i8}]
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F0:str
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F1:str
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.4
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F1:i8
      5) stfld {str,str,i8,i8}::_F2:i8
  Label [0]:
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [1]
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.8
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F1:i8
      5) stfld {str,str,i8,i8}::_F3:i8
  Label [1]:
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 130

KeyJoin_5(Arr<obj>, {str,i8}):{str,str,i8,i8}
      5) newobj {str,str,i8,i8}()
      1) dup
      1) ldc.i4.3
      5) stfld {str,str,i8,i8}::_B0:u1
      1) stloc.0 [{str,str,i8,i8}]
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F0:str
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.4
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F1:i8
      5) stfld {str,str,i8,i8}::_F2:i8
  Label [0]:
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldc.i4.m1
      1) conv.i8
      5) stfld {str,str,i8,i8}::_F3:i8
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.8
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 101

CrossJoin_3(Arr<obj>, Seq<{str,i8}>, Seq<{str,i8}>):Seq<{str,str,i8,i8}>
      1) ldarg.1 [Seq<{str,i8}>]
      1) ldarg.2 [Seq<{str,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<{str,i8},Opt<i8>>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [Func<{str,i8},Opt<i8>>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Func<{str,i8},{str,i8},{str,str,i8,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.3
      5) ldelem [Func<{str,i8},{str,str,i8,i8}>]
      1) ldnull
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.4
      5) ldelem [EqualityComparer<Opt<i8>>]
      1) ldc.i4.1
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [ExecCtx]
      1) ldc.i4.0
      5) call static KeyJoinGen::Exec(Seq<{str,i8}>, Seq<{str,i8}>, Func<{str,i8},Opt<i8>>, Func<{str,i8},Opt<i8>>, Func<{str,i8},{str,i8},{str,str,i8,i8}>, Func<{str,i8},{str,str,i8,i8}>, Func<{str,i8},{str,str,i8,i8}>, EqualityComparer<Opt<i8>>, bool, ExecCtx, i4):Seq<{str,str,i8,i8}>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<{str,str,i8,i8}>):Seq<{str,str,i8,i8}>
      1) ret
  Total Size: 88

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):ExecCtx
      1) stloc.0 [ExecCtx]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<Seq<{str,i8}>>
      1) stloc.1 [Seq<Seq<{str,i8}>>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.2
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<Seq<{str,i8}>>
      1) stloc.2 [Seq<Seq<{str,i8}>>]
      1) ldloc.1 [Seq<Seq<{str,i8}>>]
      1) ldloc.2 [Seq<Seq<{str,i8}>>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<Seq<{str,i8}>,Seq<{str,i8}>,bool>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [MethodInfo]
      5) ldtoken [Func<Seq<{str,i8}>,Seq<{str,i8}>,Seq<{str,str,i8,i8}>>]
      5) call static Type::GetTypeFromHandle(RuntimeTypeHandle):Type
      1) ldc.i4.2
      5) newarr [obj]
      1) dup
      1) ldc.i4.0
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Arr<obj>]
      5) stelem [Arr<obj>]
      1) dup
      1) ldc.i4.1
      1) ldloc.0 [ExecCtx]
      5) stelem [ExecCtx]
      5) callvirt DynamicMethod::CreateDelegate(Type, obj):Delegate
      1) ldloc.0 [ExecCtx]
      1) ldc.i4.3
      5) call static CrossJoinGen::Exec(Seq<Seq<{str,i8}>>, Seq<Seq<{str,i8}>>, Func<Seq<{str,i8}>,Seq<{str,i8}>,bool>, Func<Seq<{str,i8}>,Seq<{str,i8}>,Seq<{str,str,i8,i8}>>, ExecCtx, i4):Seq<Seq<{str,str,i8,i8}>>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<Seq<{str,str,i8,i8}>>):Seq<Seq<{str,str,i8,i8}>>
      1) ret
  Total Size: 99

Func sig: (<ctx>:x, XS:{ID:s, V:i8?}**, YS:{ID:s, V:i8?}**) to {IDX:s, IDY:s, VX:i8?, VY:i8?}**
Sequence: Seq<Seq<{str,str,i8,i8}>>
 0) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: A0, VX: 0, VY: 0 }
     1) { IDX: A1, IDY: A1, VX: 1, VY: 1 }
     2) { IDX: A3, IDY: <null>, VX: <null>, VY: -1 }
     3) { IDX: A4, IDY: A4, VX: 4, VY: 4 }
     4) { IDX: A6, IDY: A6, VX: 6, VY: 6 }
     5) { IDX: A7, IDY: A7, VX: 7, VY: 7 }
     6) { IDX: A9, IDY: A9, VX: 9, VY: 9 }
     7) { IDX: A10, IDY: <null>, VX: <null>, VY: -1 }
     8) { IDX: A12, IDY: A12, VX: 12, VY: 12 }
     9) { IDX: A13, IDY: A13, VX: 13, VY: 13 }
    10) { IDX: A15, IDY: A15, VX: 15, VY: 15 }
    11) { IDX: A16, IDY: A16, VX: 16, VY: 16 }
    12) { IDX: A18, IDY: A18, VX: 18, VY: 18 }
    13) { IDX: A19, IDY: A19, VX: 19, VY: 19 }
 1) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: B0, VX: 0, VY: 0 }
     1) { IDX: A0, IDY: B1, VX: 0, VY: 0 }
     2) { IDX: A1, IDY: <null>, VX: 1, VY: -1 }
     3) { IDX: A3, IDY: <null>, VX: <null>, VY: -1 }
     4) { IDX: A4, IDY: B8, VX: 4, VY: 4 }
     5) { IDX: A4, IDY: B9, VX: 4, VY: 4 }
     6) { IDX: A6, IDY: B12, VX: 6, VY: 6 }
     7) { IDX: A6, IDY: B13, VX: 6, VY: 6 }
     8) { IDX: A7, IDY: B14, VX: 7, VY: 7 }
     9) { IDX: A7, IDY: B15, VX: 7, VY: 7 }
    10) { IDX: A9, IDY: <null>, VX: 9, VY: -1 }
    11) { IDX: A10, IDY: <null>, VX: <null>, VY: -1 }
    12) { IDX: A12, IDY: B24, VX: 12, VY: 12 }
    13) { IDX: A12, IDY: B25, VX: 12, VY: 12 }
    14) { IDX: A13, IDY: <null>, VX: 13, VY: -1 }
    15) { IDX: A15, IDY: B30, VX: 15, VY: 15 }
    16) { IDX: A15, IDY: B31, VX: 15, VY: 15 }
    17) { IDX: A16, IDY: B32, VX: 16, VY: 16 }
    18) { IDX: A16, IDY: B33, VX: 16, VY: 16 }
    19) { IDX: A18, IDY: <null>, VX: 18, VY: -1 }
    20) { IDX: A19, IDY: B38, VX: 19, VY: 19 }
    21) { IDX: A19, IDY: B39, VX: 19, VY: 19 }
 2) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: A1, IDY: <null>, VX: 1, VY: -1 }
     2) { IDX: A3, IDY: <null>, VX: <null>, VY: -1 }
     3) { IDX: A4, IDY: <null>, VX: 4, VY: -1 }
     4) { IDX: A6, IDY: <null>, VX: 6, VY: -1 }
     5) { IDX: A7, IDY: <null>, VX: 7, VY: -1 }
     6) { IDX: A9, IDY: <null>, VX: 9, VY: -1 }
     7) { IDX: A10, IDY: <null>, VX: <null>, VY: -1 }
     8) { IDX: A12, IDY: <null>, VX: 12, VY: -1 }
     9) { IDX: A13, IDY: <null>, VX: 13, VY: -1 }
    10) { IDX: A15, IDY: <null>, VX: 15, VY: -1 }
    11) { IDX: A16, IDY: <null>, VX: 16, VY: -1 }
    12) { IDX: A18, IDY: <null>, VX: 18, VY: -1 }
    13) { IDX: A19, IDY: <null>, VX: 19, VY: -1 }
 3) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: A1, IDY: <null>, VX: 1, VY: -1 }
     2) { IDX: A3, IDY: <null>, VX: <null>, VY: -1 }
     3) { IDX: A4, IDY: <null>, VX: 4, VY: -1 }
     4) { IDX: A6, IDY: <null>, VX: 6, VY: -1 }
     5) { IDX: A7, IDY: <null>, VX: 7, VY: -1 }
     6) { IDX: A9, IDY: <null>, VX: 9, VY: -1 }
     7) { IDX: A10, IDY: <null>, VX: <null>, VY: -1 }
     8) { IDX: A12, IDY: D1, VX: 12, VY: 12 }
     9) { IDX: A13, IDY: D2, VX: 13, VY: 13 }
    10) { IDX: A15, IDY: <null>, VX: 15, VY: -1 }
    11) { IDX: A16, IDY: <null>, VX: 16, VY: -1 }
    12) { IDX: A18, IDY: <null>, VX: 18, VY: -1 }
    13) { IDX: A19, IDY: <null>, VX: 19, VY: -1 }
 4) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: A1, IDY: <null>, VX: 1, VY: -1 }
     2) { IDX: A3, IDY: <null>, VX: <null>, VY: -1 }
     3) { IDX: A4, IDY: <null>, VX: 4, VY: -1 }
     4) { IDX: A6, IDY: <null>, VX: 6, VY: -1 }
     5) { IDX: A7, IDY: <null>, VX: 7, VY: -1 }
     6) { IDX: A9, IDY: <null>, VX: 9, VY: -1 }
     7) { IDX: A10, IDY: <null>, VX: <null>, VY: -1 }
     8) { IDX: A12, IDY: <null>, VX: 12, VY: -1 }
     9) { IDX: A13, IDY: <null>, VX: 13, VY: -1 }
    10) { IDX: A15, IDY: <null>, VX: 15, VY: -1 }
    11) { IDX: A16, IDY: <null>, VX: 16, VY: -1 }
    12) { IDX: A18, IDY: <null>, VX: 18, VY: -1 }
    13) { IDX: A19, IDY: <null>, VX: 19, VY: -1 }
 5) <null>
 6) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: A0, VX: 0, VY: 0 }
     1) { IDX: B1, IDY: A0, VX: 0, VY: 0 }
     2) { IDX: B4, IDY: <null>, VX: 2, VY: -1 }
     3) { IDX: B5, IDY: <null>, VX: 2, VY: -1 }
     4) { IDX: B6, IDY: <null>, VX: <null>, VY: -1 }
     5) { IDX: B7, IDY: <null>, VX: <null>, VY: -1 }
     6) { IDX: B8, IDY: A4, VX: 4, VY: 4 }
     7) { IDX: B9, IDY: A4, VX: 4, VY: 4 }
     8) { IDX: B12, IDY: A6, VX: 6, VY: 6 }
     9) { IDX: B13, IDY: A6, VX: 6, VY: 6 }
    10) { IDX: B14, IDY: A7, VX: 7, VY: 7 }
    11) { IDX: B15, IDY: A7, VX: 7, VY: 7 }
    12) { IDX: B16, IDY: <null>, VX: <null>, VY: -1 }
    13) { IDX: B17, IDY: <null>, VX: <null>, VY: -1 }
    14) { IDX: B20, IDY: <null>, VX: 10, VY: -1 }
    15) { IDX: B21, IDY: <null>, VX: 10, VY: -1 }
    16) { IDX: B22, IDY: <null>, VX: 11, VY: -1 }
    17) { IDX: B23, IDY: <null>, VX: 11, VY: -1 }
    18) { IDX: B24, IDY: A12, VX: 12, VY: 12 }
    19) { IDX: B25, IDY: A12, VX: 12, VY: 12 }
    20) { IDX: B28, IDY: <null>, VX: 14, VY: -1 }
    21) { IDX: B29, IDY: <null>, VX: 14, VY: -1 }
    22) { IDX: B30, IDY: A15, VX: 15, VY: 15 }
    23) { IDX: B31, IDY: A15, VX: 15, VY: 15 }
    24) { IDX: B32, IDY: A16, VX: 16, VY: 16 }
    25) { IDX: B33, IDY: A16, VX: 16, VY: 16 }
    26) { IDX: B36, IDY: <null>, VX: <null>, VY: -1 }
    27) { IDX: B37, IDY: <null>, VX: <null>, VY: -1 }
    28) { IDX: B38, IDY: A19, VX: 19, VY: 19 }
    29) { IDX: B39, IDY: A19, VX: 19, VY: 19 }
 7) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: B0, VX: 0, VY: 0 }
     1) { IDX: B0, IDY: B1, VX: 0, VY: 0 }
     2) { IDX: B1, IDY: B0, VX: 0, VY: 0 }
     3) { IDX: B1, IDY: B1, VX: 0, VY: 0 }
     4) { IDX: B4, IDY: B4, VX: 2, VY: 2 }
     5) { IDX: B4, IDY: B5, VX: 2, VY: 2 }
     6) { IDX: B5, IDY: B4, VX: 2, VY: 2 }
     7) { IDX: B5, IDY: B5, VX: 2, VY: 2 }
     8) { IDX: B6, IDY: <null>, VX: <null>, VY: -1 }
     9) { IDX: B7, IDY: <null>, VX: <null>, VY: -1 }
    10) { IDX: B8, IDY: B8, VX: 4, VY: 4 }
    11) { IDX: B8, IDY: B9, VX: 4, VY: 4 }
    12) { IDX: B9, IDY: B8, VX: 4, VY: 4 }
    13) { IDX: B9, IDY: B9, VX: 4, VY: 4 }
    14) { IDX: B12, IDY: B12, VX: 6, VY: 6 }
    15) { IDX: B12, IDY: B13, VX: 6, VY: 6 }
    16) { IDX: B13, IDY: B12, VX: 6, VY: 6 }
    17) { IDX: B13, IDY: B13, VX: 6, VY: 6 }
    18) { IDX: B14, IDY: B14, VX: 7, VY: 7 }
    19) { IDX: B14, IDY: B15, VX: 7, VY: 7 }
    20) { IDX: B15, IDY: B14, VX: 7, VY: 7 }
    21) { IDX: B15, IDY: B15, VX: 7, VY: 7 }
    22) { IDX: B16, IDY: <null>, VX: <null>, VY: -1 }
    23) { IDX: B17, IDY: <null>, VX: <null>, VY: -1 }
    24) { IDX: B20, IDY: B20, VX: 10, VY: 10 }
    25) { IDX: B20, IDY: B21, VX: 10, VY: 10 }
    26) { IDX: B21, IDY: B20, VX: 10, VY: 10 }
    27) { IDX: B21, IDY: B21, VX: 10, VY: 10 }
    28) { IDX: B22, IDY: B22, VX: 11, VY: 11 }
    29) { IDX: B22, IDY: B23, VX: 11, VY: 11 }
    30) { IDX: B23, IDY: B22, VX: 11, VY: 11 }
    31) { IDX: B23, IDY: B23, VX: 11, VY: 11 }
    32) { IDX: B24, IDY: B24, VX: 12, VY: 12 }
    33) { IDX: B24, IDY: B25, VX: 12, VY: 12 }
    34) { IDX: B25, IDY: B24, VX: 12, VY: 12 }
    35) { IDX: B25, IDY: B25, VX: 12, VY: 12 }
    36) { IDX: B28, IDY: B28, VX: 14, VY: 14 }
    37) { IDX: B28, IDY: B29, VX: 14, VY: 14 }
    38) { IDX: B29, IDY: B28, VX: 14, VY: 14 }
    39) { IDX: B29, IDY: B29, VX: 14, VY: 14 }
    40) { IDX: B30, IDY: B30, VX: 15, VY: 15 }
    41) { IDX: B30, IDY: B31, VX: 15, VY: 15 }
    42) { IDX: B31, IDY: B30, VX: 15, VY: 15 }
    43) { IDX: B31, IDY: B31, VX: 15, VY: 15 }
    44) { IDX: B32, IDY: B32, VX: 16, VY: 16 }
    45) { IDX: B32, IDY: B33, VX: 16, VY: 16 }
    46) { IDX: B33, IDY: B32, VX: 16, VY: 16 }
    47) { IDX: B33, IDY: B33, VX: 16, VY: 16 }
    48) { IDX: B36, IDY: <null>, VX: <null>, VY: -1 }
    49) { IDX: B37, IDY: <null>, VX: <null>, VY: -1 }
    50) { IDX: B38, IDY: B38, VX: 19, VY: 19 }
    51) { IDX: B38, IDY: B39, VX: 19, VY: 19 }
    52) { IDX: B39, IDY: B38, VX: 19, VY: 19 }
    53) { IDX: B39, IDY: B39, VX: 19, VY: 19 }
 8) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: B1, IDY: <null>, VX: 0, VY: -1 }
     2) { IDX: B4, IDY: <null>, VX: 2, VY: -1 }
     3) { IDX: B5, IDY: <null>, VX: 2, VY: -1 }
     4) { IDX: B6, IDY: <null>, VX: <null>, VY: -1 }
     5) { IDX: B7, IDY: <null>, VX: <null>, VY: -1 }
     6) { IDX: B8, IDY: <null>, VX: 4, VY: -1 }
     7) { IDX: B9, IDY: <null>, VX: 4, VY: -1 }
     8) { IDX: B12, IDY: <null>, VX: 6, VY: -1 }
     9) { IDX: B13, IDY: <null>, VX: 6, VY: -1 }
    10) { IDX: B14, IDY: <null>, VX: 7, VY: -1 }
    11) { IDX: B15, IDY: <null>, VX: 7, VY: -1 }
    12) { IDX: B16, IDY: <null>, VX: <null>, VY: -1 }
    13) { IDX: B17, IDY: <null>, VX: <null>, VY: -1 }
    14) { IDX: B20, IDY: <null>, VX: 10, VY: -1 }
    15) { IDX: B21, IDY: <null>, VX: 10, VY: -1 }
    16) { IDX: B22, IDY: <null>, VX: 11, VY: -1 }
    17) { IDX: B23, IDY: <null>, VX: 11, VY: -1 }
    18) { IDX: B24, IDY: <null>, VX: 12, VY: -1 }
    19) { IDX: B25, IDY: <null>, VX: 12, VY: -1 }
    20) { IDX: B28, IDY: <null>, VX: 14, VY: -1 }
    21) { IDX: B29, IDY: <null>, VX: 14, VY: -1 }
    22) { IDX: B30, IDY: <null>, VX: 15, VY: -1 }
    23) { IDX: B31, IDY: <null>, VX: 15, VY: -1 }
    24) { IDX: B32, IDY: <null>, VX: 16, VY: -1 }
    25) { IDX: B33, IDY: <null>, VX: 16, VY: -1 }
    26) { IDX: B36, IDY: <null>, VX: <null>, VY: -1 }
    27) { IDX: B37, IDY: <null>, VX: <null>, VY: -1 }
    28) { IDX: B38, IDY: <null>, VX: 19, VY: -1 }
    29) { IDX: B39, IDY: <null>, VX: 19, VY: -1 }
 9) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: B1, IDY: <null>, VX: 0, VY: -1 }
     2) { IDX: B4, IDY: <null>, VX: 2, VY: -1 }
     3) { IDX: B5, IDY: <null>, VX: 2, VY: -1 }
     4) { IDX: B6, IDY: <null>, VX: <null>, VY: -1 }
     5) { IDX: B7, IDY: <null>, VX: <null>, VY: -1 }
     6) { IDX: B8, IDY: <null>, VX: 4, VY: -1 }
     7) { IDX: B9, IDY: <null>, VX: 4, VY: -1 }
     8) { IDX: B12, IDY: <null>, VX: 6, VY: -1 }
     9) { IDX: B13, IDY: <null>, VX: 6, VY: -1 }
    10) { IDX: B14, IDY: <null>, VX: 7, VY: -1 }
    11) { IDX: B15, IDY: <null>, VX: 7, VY: -1 }
    12) { IDX: B16, IDY: <null>, VX: <null>, VY: -1 }
    13) { IDX: B17, IDY: <null>, VX: <null>, VY: -1 }
    14) { IDX: B20, IDY: <null>, VX: 10, VY: -1 }
    15) { IDX: B21, IDY: <null>, VX: 10, VY: -1 }
    16) { IDX: B22, IDY: D0, VX: 11, VY: 11 }
    17) { IDX: B23, IDY: D0, VX: 11, VY: 11 }
    18) { IDX: B24, IDY: D1, VX: 12, VY: 12 }
    19) { IDX: B25, IDY: D1, VX: 12, VY: 12 }
    20) { IDX: B28, IDY: <null>, VX: 14, VY: -1 }
    21) { IDX: B29, IDY: <null>, VX: 14, VY: -1 }
    22) { IDX: B30, IDY: <null>, VX: 15, VY: -1 }
    23) { IDX: B31, IDY: <null>, VX: 15, VY: -1 }
    24) { IDX: B32, IDY: <null>, VX: 16, VY: -1 }
    25) { IDX: B33, IDY: <null>, VX: 16, VY: -1 }
    26) { IDX: B36, IDY: <null>, VX: <null>, VY: -1 }
    27) { IDX: B37, IDY: <null>, VX: <null>, VY: -1 }
    28) { IDX: B38, IDY: <null>, VX: 19, VY: -1 }
    29) { IDX: B39, IDY: <null>, VX: 19, VY: -1 }
10) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: B1, IDY: <null>, VX: 0, VY: -1 }
     2) { IDX: B4, IDY: <null>, VX: 2, VY: -1 }
     3) { IDX: B5, IDY: <null>, VX: 2, VY: -1 }
     4) { IDX: B6, IDY: <null>, VX: <null>, VY: -1 }
     5) { IDX: B7, IDY: <null>, VX: <null>, VY: -1 }
     6) { IDX: B8, IDY: <null>, VX: 4, VY: -1 }
     7) { IDX: B9, IDY: <null>, VX: 4, VY: -1 }
     8) { IDX: B12, IDY: <null>, VX: 6, VY: -1 }
     9) { IDX: B13, IDY: <null>, VX: 6, VY: -1 }
    10) { IDX: B14, IDY: <null>, VX: 7, VY: -1 }
    11) { IDX: B15, IDY: <null>, VX: 7, VY: -1 }
    12) { IDX: B16, IDY: <null>, VX: <null>, VY: -1 }
    13) { IDX: B17, IDY: <null>, VX: <null>, VY: -1 }
    14) { IDX: B20, IDY: <null>, VX: 10, VY: -1 }
    15) { IDX: B21, IDY: <null>, VX: 10, VY: -1 }
    16) { IDX: B22, IDY: <null>, VX: 11, VY: -1 }
    17) { IDX: B23, IDY: <null>, VX: 11, VY: -1 }
    18) { IDX: B24, IDY: <null>, VX: 12, VY: -1 }
    19) { IDX: B25, IDY: <null>, VX: 12, VY: -1 }
    20) { IDX: B28, IDY: <null>, VX: 14, VY: -1 }
    21) { IDX: B29, IDY: <null>, VX: 14, VY: -1 }
    22) { IDX: B30, IDY: <null>, VX: 15, VY: -1 }
    23) { IDX: B31, IDY: <null>, VX: 15, VY: -1 }
    24) { IDX: B32, IDY: <null>, VX: 16, VY: -1 }
    25) { IDX: B33, IDY: <null>, VX: 16, VY: -1 }
    26) { IDX: B36, IDY: <null>, VX: <null>, VY: -1 }
    27) { IDX: B37, IDY: <null>, VX: <null>, VY: -1 }
    28) { IDX: B38, IDY: <null>, VX: 19, VY: -1 }
    29) { IDX: B39, IDY: <null>, VX: 19, VY: -1 }
11) <null>
12) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: <null>, VX: <null>, VY: -1 }
     1) { IDX: C1, IDY: <null>, VX: <null>, VY: -1 }
     2) { IDX: C2, IDY: <null>, VX: <null>, VY: -1 }
13) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: <null>, VX: <null>, VY: -1 }
     1) { IDX: C1, IDY: <null>, VX: <null>, VY: -1 }
     2) { IDX: C2, IDY: <null>, VX: <null>, VY: -1 }
14) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: <null>, VX: <null>, VY: -1 }
     1) { IDX: C1, IDY: <null>, VX: <null>, VY: -1 }
     2) { IDX: C2, IDY: <null>, VX: <null>, VY: -1 }
15) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: <null>, VX: <null>, VY: -1 }
     1) { IDX: C1, IDY: <null>, VX: <null>, VY: -1 }
     2) { IDX: C2, IDY: <null>, VX: <null>, VY: -1 }
16) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: <null>, VX: <null>, VY: -1 }
     1) { IDX: C1, IDY: <null>, VX: <null>, VY: -1 }
     2) { IDX: C2, IDY: <null>, VX: <null>, VY: -1 }
17) <null>
18) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: <null>, VX: 11, VY: -1 }
     1) { IDX: D1, IDY: A12, VX: 12, VY: 12 }
     2) { IDX: D2, IDY: A13, VX: 13, VY: 13 }
19) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: B22, VX: 11, VY: 11 }
     1) { IDX: D0, IDY: B23, VX: 11, VY: 11 }
     2) { IDX: D1, IDY: B24, VX: 12, VY: 12 }
     3) { IDX: D1, IDY: B25, VX: 12, VY: 12 }
     4) { IDX: D2, IDY: <null>, VX: 13, VY: -1 }
20) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: <null>, VX: 11, VY: -1 }
     1) { IDX: D1, IDY: <null>, VX: 12, VY: -1 }
     2) { IDX: D2, IDY: <null>, VX: 13, VY: -1 }
21) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: D0, VX: 11, VY: 11 }
     1) { IDX: D1, IDY: D1, VX: 12, VY: 12 }
     2) { IDX: D2, IDY: D2, VX: 13, VY: 13 }
22) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: <null>, VX: 11, VY: -1 }
     1) { IDX: D1, IDY: <null>, VX: 12, VY: -1 }
     2) { IDX: D2, IDY: <null>, VX: 13, VY: -1 }
23) <null>
24) Sequence: Seq<{str,str,i8,i8}>
25) Sequence: Seq<{str,str,i8,i8}>
26) Sequence: Seq<{str,str,i8,i8}>
27) Sequence: Seq<{str,str,i8,i8}>
28) Sequence: Seq<{str,str,i8,i8}>
29) <null>
30) <null>
31) <null>
32) <null>
33) <null>
34) <null>
35) <null>
*** Ctx ping count: 190
    [0:3](141=0+0+141): KeyJoin(*3: *1x, *4: *2x, *3.V, *4.V, {IDX:*3.ID, IDY:*4.ID, VX:*3.V, VY:*4.V}, {IDX:*3.ID, VX:*3.V, VY:Opt<i8?>(-1)[, IDY:str(<null>)]})
    [3:5](49=7+42): CrossJoin(*1: XS, *2: YS, true, KeyJoin(*3: *1, *4: *2, *3.V, *4.V, {IDX:*3.ID, IDY:*4.ID, VX:*3.V, VY:*4.V}, {IDX:*3.ID, VX:*3.V, VY:Opt<i8?>(-1)[, IDY:str(<null>)]}))
###
> CrossJoin(X:XS, Y:YS, true,   KeyJoin(x:X, y:Y,        V,     V , { IDX:x.ID, IDY:y.ID, VX:x.V, VY:y.V }, { IDX:ID, VX:V, VY:-1 }))
CrossJoin(X : XS, Y : YS, true, KeyJoin(x : X, y : Y, V, V, { IDX : x.ID, IDY : y.ID, VX : x.V, VY : y.V }, { IDX : ID, VX : V, VY : -1 })) : {IDX:s, IDY:s, VX:i8?, VY:i8?}**
BndKind:Call, Type:{IDX:s, IDY:s, VX:i8?, VY:i8?}**, Bnd:(Call(∂.CrossJoin([map:1] Global(XS), [map:2] Global(YS), true:b, Call(∂.KeyJoin([map:3] Scope(1), [map:4] Scope(2), GetField(Scope(3), V), GetField(Scope(4), V), {IDX:GetField(Scope(3), ID), IDY:GetField(Scope(4), ID), VX:GetField(Scope(3), V), VY:GetField(Scope(4), V)}, {IDX:GetField(Scope(3), ID), VX:GetField(Scope(3), V), VY:Opt<i8?>(-1:i8)[, IDY:str(<null>)]})))))
// (<ctx>, ∂.XS:{ID:s, V:i8?}**, ∂.YS:{ID:s, V:i8?}**) : {IDX:s, IDY:s, VX:i8?, VY:i8?}**
CrossJoin_2(Arr<obj>, Seq<{str,i8}>, Seq<{str,i8}>):bool
      1) ldc.i4.1
      1) ret
  Total Size: 2

KeyJoin_2(Arr<obj>, {str,i8}):Opt<i8>
      1) ldarg.1 [{str,i8}]
      1) dup
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      5) ldfld {str,i8}::_F1:i8
      5) newobj Opt<i8>(i8)
      5) br [1]
  Label [0]:
      1) pop
      5) call static CodeGenUtil::GetDefault():Opt<i8>
  Label [1]:
      1) ret
  Total Size: 36

KeyJoin_3(Arr<obj>, {str,i8}):Opt<i8>
      1) ldarg.1 [{str,i8}]
      1) dup
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      5) ldfld {str,i8}::_F1:i8
      5) newobj Opt<i8>(i8)
      5) br [1]
  Label [0]:
      1) pop
      5) call static CodeGenUtil::GetDefault():Opt<i8>
  Label [1]:
      1) ret
  Total Size: 36

KeyJoin_4(Arr<obj>, {str,i8}, {str,i8}):{str,str,i8,i8}
      5) newobj {str,str,i8,i8}()
      1) dup
      1) ldc.i4.3
      5) stfld {str,str,i8,i8}::_B0:u1
      1) stloc.0 [{str,str,i8,i8}]
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F0:str
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F1:str
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.4
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F1:i8
      5) stfld {str,str,i8,i8}::_F2:i8
  Label [0]:
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [1]
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.8
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F1:i8
      5) stfld {str,str,i8,i8}::_F3:i8
  Label [1]:
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 130

KeyJoin_5(Arr<obj>, {str,i8}):{str,str,i8,i8}
      5) newobj {str,str,i8,i8}()
      1) dup
      1) ldc.i4.3
      5) stfld {str,str,i8,i8}::_B0:u1
      1) stloc.0 [{str,str,i8,i8}]
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F0:str
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.4
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F1:i8
      5) stfld {str,str,i8,i8}::_F2:i8
  Label [0]:
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldc.i4.m1
      1) conv.i8
      5) stfld {str,str,i8,i8}::_F3:i8
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.8
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 101

CrossJoin_3(Arr<obj>, Seq<{str,i8}>, Seq<{str,i8}>):Seq<{str,str,i8,i8}>
      1) ldarg.1 [Seq<{str,i8}>]
      1) ldarg.2 [Seq<{str,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<{str,i8},Opt<i8>>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [Func<{str,i8},Opt<i8>>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Func<{str,i8},{str,i8},{str,str,i8,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.3
      5) ldelem [Func<{str,i8},{str,str,i8,i8}>]
      1) ldnull
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.4
      5) ldelem [EqualityComparer<Opt<i8>>]
      1) ldc.i4.1
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [ExecCtx]
      1) ldc.i4.0
      5) call static KeyJoinGen::Exec(Seq<{str,i8}>, Seq<{str,i8}>, Func<{str,i8},Opt<i8>>, Func<{str,i8},Opt<i8>>, Func<{str,i8},{str,i8},{str,str,i8,i8}>, Func<{str,i8},{str,str,i8,i8}>, Func<{str,i8},{str,str,i8,i8}>, EqualityComparer<Opt<i8>>, bool, ExecCtx, i4):Seq<{str,str,i8,i8}>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<{str,str,i8,i8}>):Seq<{str,str,i8,i8}>
      1) ret
  Total Size: 88

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):ExecCtx
      1) stloc.0 [ExecCtx]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<Seq<{str,i8}>>
      1) stloc.1 [Seq<Seq<{str,i8}>>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.2
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<Seq<{str,i8}>>
      1) stloc.2 [Seq<Seq<{str,i8}>>]
      1) ldloc.1 [Seq<Seq<{str,i8}>>]
      1) ldloc.2 [Seq<Seq<{str,i8}>>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<Seq<{str,i8}>,Seq<{str,i8}>,bool>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [MethodInfo]
      5) ldtoken [Func<Seq<{str,i8}>,Seq<{str,i8}>,Seq<{str,str,i8,i8}>>]
      5) call static Type::GetTypeFromHandle(RuntimeTypeHandle):Type
      1) ldc.i4.2
      5) newarr [obj]
      1) dup
      1) ldc.i4.0
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Arr<obj>]
      5) stelem [Arr<obj>]
      1) dup
      1) ldc.i4.1
      1) ldloc.0 [ExecCtx]
      5) stelem [ExecCtx]
      5) callvirt DynamicMethod::CreateDelegate(Type, obj):Delegate
      1) ldloc.0 [ExecCtx]
      1) ldc.i4.3
      5) call static CrossJoinGen::Exec(Seq<Seq<{str,i8}>>, Seq<Seq<{str,i8}>>, Func<Seq<{str,i8}>,Seq<{str,i8}>,bool>, Func<Seq<{str,i8}>,Seq<{str,i8}>,Seq<{str,str,i8,i8}>>, ExecCtx, i4):Seq<Seq<{str,str,i8,i8}>>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<Seq<{str,str,i8,i8}>>):Seq<Seq<{str,str,i8,i8}>>
      1) ret
  Total Size: 99

Func sig: (<ctx>:x, XS:{ID:s, V:i8?}**, YS:{ID:s, V:i8?}**) to {IDX:s, IDY:s, VX:i8?, VY:i8?}**
Sequence: Seq<Seq<{str,str,i8,i8}>>
 0) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: A0, VX: 0, VY: 0 }
     1) { IDX: A1, IDY: A1, VX: 1, VY: 1 }
     2) { IDX: A3, IDY: <null>, VX: <null>, VY: -1 }
     3) { IDX: A4, IDY: A4, VX: 4, VY: 4 }
     4) { IDX: A6, IDY: A6, VX: 6, VY: 6 }
     5) { IDX: A7, IDY: A7, VX: 7, VY: 7 }
     6) { IDX: A9, IDY: A9, VX: 9, VY: 9 }
     7) { IDX: A10, IDY: <null>, VX: <null>, VY: -1 }
     8) { IDX: A12, IDY: A12, VX: 12, VY: 12 }
     9) { IDX: A13, IDY: A13, VX: 13, VY: 13 }
    10) { IDX: A15, IDY: A15, VX: 15, VY: 15 }
    11) { IDX: A16, IDY: A16, VX: 16, VY: 16 }
    12) { IDX: A18, IDY: A18, VX: 18, VY: 18 }
    13) { IDX: A19, IDY: A19, VX: 19, VY: 19 }
 1) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: B0, VX: 0, VY: 0 }
     1) { IDX: A0, IDY: B1, VX: 0, VY: 0 }
     2) { IDX: A1, IDY: <null>, VX: 1, VY: -1 }
     3) { IDX: A3, IDY: <null>, VX: <null>, VY: -1 }
     4) { IDX: A4, IDY: B8, VX: 4, VY: 4 }
     5) { IDX: A4, IDY: B9, VX: 4, VY: 4 }
     6) { IDX: A6, IDY: B12, VX: 6, VY: 6 }
     7) { IDX: A6, IDY: B13, VX: 6, VY: 6 }
     8) { IDX: A7, IDY: B14, VX: 7, VY: 7 }
     9) { IDX: A7, IDY: B15, VX: 7, VY: 7 }
    10) { IDX: A9, IDY: <null>, VX: 9, VY: -1 }
    11) { IDX: A10, IDY: <null>, VX: <null>, VY: -1 }
    12) { IDX: A12, IDY: B24, VX: 12, VY: 12 }
    13) { IDX: A12, IDY: B25, VX: 12, VY: 12 }
    14) { IDX: A13, IDY: <null>, VX: 13, VY: -1 }
    15) { IDX: A15, IDY: B30, VX: 15, VY: 15 }
    16) { IDX: A15, IDY: B31, VX: 15, VY: 15 }
    17) { IDX: A16, IDY: B32, VX: 16, VY: 16 }
    18) { IDX: A16, IDY: B33, VX: 16, VY: 16 }
    19) { IDX: A18, IDY: <null>, VX: 18, VY: -1 }
    20) { IDX: A19, IDY: B38, VX: 19, VY: 19 }
    21) { IDX: A19, IDY: B39, VX: 19, VY: 19 }
 2) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: A1, IDY: <null>, VX: 1, VY: -1 }
     2) { IDX: A3, IDY: <null>, VX: <null>, VY: -1 }
     3) { IDX: A4, IDY: <null>, VX: 4, VY: -1 }
     4) { IDX: A6, IDY: <null>, VX: 6, VY: -1 }
     5) { IDX: A7, IDY: <null>, VX: 7, VY: -1 }
     6) { IDX: A9, IDY: <null>, VX: 9, VY: -1 }
     7) { IDX: A10, IDY: <null>, VX: <null>, VY: -1 }
     8) { IDX: A12, IDY: <null>, VX: 12, VY: -1 }
     9) { IDX: A13, IDY: <null>, VX: 13, VY: -1 }
    10) { IDX: A15, IDY: <null>, VX: 15, VY: -1 }
    11) { IDX: A16, IDY: <null>, VX: 16, VY: -1 }
    12) { IDX: A18, IDY: <null>, VX: 18, VY: -1 }
    13) { IDX: A19, IDY: <null>, VX: 19, VY: -1 }
 3) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: A1, IDY: <null>, VX: 1, VY: -1 }
     2) { IDX: A3, IDY: <null>, VX: <null>, VY: -1 }
     3) { IDX: A4, IDY: <null>, VX: 4, VY: -1 }
     4) { IDX: A6, IDY: <null>, VX: 6, VY: -1 }
     5) { IDX: A7, IDY: <null>, VX: 7, VY: -1 }
     6) { IDX: A9, IDY: <null>, VX: 9, VY: -1 }
     7) { IDX: A10, IDY: <null>, VX: <null>, VY: -1 }
     8) { IDX: A12, IDY: D1, VX: 12, VY: 12 }
     9) { IDX: A13, IDY: D2, VX: 13, VY: 13 }
    10) { IDX: A15, IDY: <null>, VX: 15, VY: -1 }
    11) { IDX: A16, IDY: <null>, VX: 16, VY: -1 }
    12) { IDX: A18, IDY: <null>, VX: 18, VY: -1 }
    13) { IDX: A19, IDY: <null>, VX: 19, VY: -1 }
 4) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: A1, IDY: <null>, VX: 1, VY: -1 }
     2) { IDX: A3, IDY: <null>, VX: <null>, VY: -1 }
     3) { IDX: A4, IDY: <null>, VX: 4, VY: -1 }
     4) { IDX: A6, IDY: <null>, VX: 6, VY: -1 }
     5) { IDX: A7, IDY: <null>, VX: 7, VY: -1 }
     6) { IDX: A9, IDY: <null>, VX: 9, VY: -1 }
     7) { IDX: A10, IDY: <null>, VX: <null>, VY: -1 }
     8) { IDX: A12, IDY: <null>, VX: 12, VY: -1 }
     9) { IDX: A13, IDY: <null>, VX: 13, VY: -1 }
    10) { IDX: A15, IDY: <null>, VX: 15, VY: -1 }
    11) { IDX: A16, IDY: <null>, VX: 16, VY: -1 }
    12) { IDX: A18, IDY: <null>, VX: 18, VY: -1 }
    13) { IDX: A19, IDY: <null>, VX: 19, VY: -1 }
 5) <null>
 6) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: A0, VX: 0, VY: 0 }
     1) { IDX: B1, IDY: A0, VX: 0, VY: 0 }
     2) { IDX: B4, IDY: <null>, VX: 2, VY: -1 }
     3) { IDX: B5, IDY: <null>, VX: 2, VY: -1 }
     4) { IDX: B6, IDY: <null>, VX: <null>, VY: -1 }
     5) { IDX: B7, IDY: <null>, VX: <null>, VY: -1 }
     6) { IDX: B8, IDY: A4, VX: 4, VY: 4 }
     7) { IDX: B9, IDY: A4, VX: 4, VY: 4 }
     8) { IDX: B12, IDY: A6, VX: 6, VY: 6 }
     9) { IDX: B13, IDY: A6, VX: 6, VY: 6 }
    10) { IDX: B14, IDY: A7, VX: 7, VY: 7 }
    11) { IDX: B15, IDY: A7, VX: 7, VY: 7 }
    12) { IDX: B16, IDY: <null>, VX: <null>, VY: -1 }
    13) { IDX: B17, IDY: <null>, VX: <null>, VY: -1 }
    14) { IDX: B20, IDY: <null>, VX: 10, VY: -1 }
    15) { IDX: B21, IDY: <null>, VX: 10, VY: -1 }
    16) { IDX: B22, IDY: <null>, VX: 11, VY: -1 }
    17) { IDX: B23, IDY: <null>, VX: 11, VY: -1 }
    18) { IDX: B24, IDY: A12, VX: 12, VY: 12 }
    19) { IDX: B25, IDY: A12, VX: 12, VY: 12 }
    20) { IDX: B28, IDY: <null>, VX: 14, VY: -1 }
    21) { IDX: B29, IDY: <null>, VX: 14, VY: -1 }
    22) { IDX: B30, IDY: A15, VX: 15, VY: 15 }
    23) { IDX: B31, IDY: A15, VX: 15, VY: 15 }
    24) { IDX: B32, IDY: A16, VX: 16, VY: 16 }
    25) { IDX: B33, IDY: A16, VX: 16, VY: 16 }
    26) { IDX: B36, IDY: <null>, VX: <null>, VY: -1 }
    27) { IDX: B37, IDY: <null>, VX: <null>, VY: -1 }
    28) { IDX: B38, IDY: A19, VX: 19, VY: 19 }
    29) { IDX: B39, IDY: A19, VX: 19, VY: 19 }
 7) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: B0, VX: 0, VY: 0 }
     1) { IDX: B0, IDY: B1, VX: 0, VY: 0 }
     2) { IDX: B1, IDY: B0, VX: 0, VY: 0 }
     3) { IDX: B1, IDY: B1, VX: 0, VY: 0 }
     4) { IDX: B4, IDY: B4, VX: 2, VY: 2 }
     5) { IDX: B4, IDY: B5, VX: 2, VY: 2 }
     6) { IDX: B5, IDY: B4, VX: 2, VY: 2 }
     7) { IDX: B5, IDY: B5, VX: 2, VY: 2 }
     8) { IDX: B6, IDY: <null>, VX: <null>, VY: -1 }
     9) { IDX: B7, IDY: <null>, VX: <null>, VY: -1 }
    10) { IDX: B8, IDY: B8, VX: 4, VY: 4 }
    11) { IDX: B8, IDY: B9, VX: 4, VY: 4 }
    12) { IDX: B9, IDY: B8, VX: 4, VY: 4 }
    13) { IDX: B9, IDY: B9, VX: 4, VY: 4 }
    14) { IDX: B12, IDY: B12, VX: 6, VY: 6 }
    15) { IDX: B12, IDY: B13, VX: 6, VY: 6 }
    16) { IDX: B13, IDY: B12, VX: 6, VY: 6 }
    17) { IDX: B13, IDY: B13, VX: 6, VY: 6 }
    18) { IDX: B14, IDY: B14, VX: 7, VY: 7 }
    19) { IDX: B14, IDY: B15, VX: 7, VY: 7 }
    20) { IDX: B15, IDY: B14, VX: 7, VY: 7 }
    21) { IDX: B15, IDY: B15, VX: 7, VY: 7 }
    22) { IDX: B16, IDY: <null>, VX: <null>, VY: -1 }
    23) { IDX: B17, IDY: <null>, VX: <null>, VY: -1 }
    24) { IDX: B20, IDY: B20, VX: 10, VY: 10 }
    25) { IDX: B20, IDY: B21, VX: 10, VY: 10 }
    26) { IDX: B21, IDY: B20, VX: 10, VY: 10 }
    27) { IDX: B21, IDY: B21, VX: 10, VY: 10 }
    28) { IDX: B22, IDY: B22, VX: 11, VY: 11 }
    29) { IDX: B22, IDY: B23, VX: 11, VY: 11 }
    30) { IDX: B23, IDY: B22, VX: 11, VY: 11 }
    31) { IDX: B23, IDY: B23, VX: 11, VY: 11 }
    32) { IDX: B24, IDY: B24, VX: 12, VY: 12 }
    33) { IDX: B24, IDY: B25, VX: 12, VY: 12 }
    34) { IDX: B25, IDY: B24, VX: 12, VY: 12 }
    35) { IDX: B25, IDY: B25, VX: 12, VY: 12 }
    36) { IDX: B28, IDY: B28, VX: 14, VY: 14 }
    37) { IDX: B28, IDY: B29, VX: 14, VY: 14 }
    38) { IDX: B29, IDY: B28, VX: 14, VY: 14 }
    39) { IDX: B29, IDY: B29, VX: 14, VY: 14 }
    40) { IDX: B30, IDY: B30, VX: 15, VY: 15 }
    41) { IDX: B30, IDY: B31, VX: 15, VY: 15 }
    42) { IDX: B31, IDY: B30, VX: 15, VY: 15 }
    43) { IDX: B31, IDY: B31, VX: 15, VY: 15 }
    44) { IDX: B32, IDY: B32, VX: 16, VY: 16 }
    45) { IDX: B32, IDY: B33, VX: 16, VY: 16 }
    46) { IDX: B33, IDY: B32, VX: 16, VY: 16 }
    47) { IDX: B33, IDY: B33, VX: 16, VY: 16 }
    48) { IDX: B36, IDY: <null>, VX: <null>, VY: -1 }
    49) { IDX: B37, IDY: <null>, VX: <null>, VY: -1 }
    50) { IDX: B38, IDY: B38, VX: 19, VY: 19 }
    51) { IDX: B38, IDY: B39, VX: 19, VY: 19 }
    52) { IDX: B39, IDY: B38, VX: 19, VY: 19 }
    53) { IDX: B39, IDY: B39, VX: 19, VY: 19 }
 8) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: B1, IDY: <null>, VX: 0, VY: -1 }
     2) { IDX: B4, IDY: <null>, VX: 2, VY: -1 }
     3) { IDX: B5, IDY: <null>, VX: 2, VY: -1 }
     4) { IDX: B6, IDY: <null>, VX: <null>, VY: -1 }
     5) { IDX: B7, IDY: <null>, VX: <null>, VY: -1 }
     6) { IDX: B8, IDY: <null>, VX: 4, VY: -1 }
     7) { IDX: B9, IDY: <null>, VX: 4, VY: -1 }
     8) { IDX: B12, IDY: <null>, VX: 6, VY: -1 }
     9) { IDX: B13, IDY: <null>, VX: 6, VY: -1 }
    10) { IDX: B14, IDY: <null>, VX: 7, VY: -1 }
    11) { IDX: B15, IDY: <null>, VX: 7, VY: -1 }
    12) { IDX: B16, IDY: <null>, VX: <null>, VY: -1 }
    13) { IDX: B17, IDY: <null>, VX: <null>, VY: -1 }
    14) { IDX: B20, IDY: <null>, VX: 10, VY: -1 }
    15) { IDX: B21, IDY: <null>, VX: 10, VY: -1 }
    16) { IDX: B22, IDY: <null>, VX: 11, VY: -1 }
    17) { IDX: B23, IDY: <null>, VX: 11, VY: -1 }
    18) { IDX: B24, IDY: <null>, VX: 12, VY: -1 }
    19) { IDX: B25, IDY: <null>, VX: 12, VY: -1 }
    20) { IDX: B28, IDY: <null>, VX: 14, VY: -1 }
    21) { IDX: B29, IDY: <null>, VX: 14, VY: -1 }
    22) { IDX: B30, IDY: <null>, VX: 15, VY: -1 }
    23) { IDX: B31, IDY: <null>, VX: 15, VY: -1 }
    24) { IDX: B32, IDY: <null>, VX: 16, VY: -1 }
    25) { IDX: B33, IDY: <null>, VX: 16, VY: -1 }
    26) { IDX: B36, IDY: <null>, VX: <null>, VY: -1 }
    27) { IDX: B37, IDY: <null>, VX: <null>, VY: -1 }
    28) { IDX: B38, IDY: <null>, VX: 19, VY: -1 }
    29) { IDX: B39, IDY: <null>, VX: 19, VY: -1 }
 9) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: B1, IDY: <null>, VX: 0, VY: -1 }
     2) { IDX: B4, IDY: <null>, VX: 2, VY: -1 }
     3) { IDX: B5, IDY: <null>, VX: 2, VY: -1 }
     4) { IDX: B6, IDY: <null>, VX: <null>, VY: -1 }
     5) { IDX: B7, IDY: <null>, VX: <null>, VY: -1 }
     6) { IDX: B8, IDY: <null>, VX: 4, VY: -1 }
     7) { IDX: B9, IDY: <null>, VX: 4, VY: -1 }
     8) { IDX: B12, IDY: <null>, VX: 6, VY: -1 }
     9) { IDX: B13, IDY: <null>, VX: 6, VY: -1 }
    10) { IDX: B14, IDY: <null>, VX: 7, VY: -1 }
    11) { IDX: B15, IDY: <null>, VX: 7, VY: -1 }
    12) { IDX: B16, IDY: <null>, VX: <null>, VY: -1 }
    13) { IDX: B17, IDY: <null>, VX: <null>, VY: -1 }
    14) { IDX: B20, IDY: <null>, VX: 10, VY: -1 }
    15) { IDX: B21, IDY: <null>, VX: 10, VY: -1 }
    16) { IDX: B22, IDY: D0, VX: 11, VY: 11 }
    17) { IDX: B23, IDY: D0, VX: 11, VY: 11 }
    18) { IDX: B24, IDY: D1, VX: 12, VY: 12 }
    19) { IDX: B25, IDY: D1, VX: 12, VY: 12 }
    20) { IDX: B28, IDY: <null>, VX: 14, VY: -1 }
    21) { IDX: B29, IDY: <null>, VX: 14, VY: -1 }
    22) { IDX: B30, IDY: <null>, VX: 15, VY: -1 }
    23) { IDX: B31, IDY: <null>, VX: 15, VY: -1 }
    24) { IDX: B32, IDY: <null>, VX: 16, VY: -1 }
    25) { IDX: B33, IDY: <null>, VX: 16, VY: -1 }
    26) { IDX: B36, IDY: <null>, VX: <null>, VY: -1 }
    27) { IDX: B37, IDY: <null>, VX: <null>, VY: -1 }
    28) { IDX: B38, IDY: <null>, VX: 19, VY: -1 }
    29) { IDX: B39, IDY: <null>, VX: 19, VY: -1 }
10) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: B1, IDY: <null>, VX: 0, VY: -1 }
     2) { IDX: B4, IDY: <null>, VX: 2, VY: -1 }
     3) { IDX: B5, IDY: <null>, VX: 2, VY: -1 }
     4) { IDX: B6, IDY: <null>, VX: <null>, VY: -1 }
     5) { IDX: B7, IDY: <null>, VX: <null>, VY: -1 }
     6) { IDX: B8, IDY: <null>, VX: 4, VY: -1 }
     7) { IDX: B9, IDY: <null>, VX: 4, VY: -1 }
     8) { IDX: B12, IDY: <null>, VX: 6, VY: -1 }
     9) { IDX: B13, IDY: <null>, VX: 6, VY: -1 }
    10) { IDX: B14, IDY: <null>, VX: 7, VY: -1 }
    11) { IDX: B15, IDY: <null>, VX: 7, VY: -1 }
    12) { IDX: B16, IDY: <null>, VX: <null>, VY: -1 }
    13) { IDX: B17, IDY: <null>, VX: <null>, VY: -1 }
    14) { IDX: B20, IDY: <null>, VX: 10, VY: -1 }
    15) { IDX: B21, IDY: <null>, VX: 10, VY: -1 }
    16) { IDX: B22, IDY: <null>, VX: 11, VY: -1 }
    17) { IDX: B23, IDY: <null>, VX: 11, VY: -1 }
    18) { IDX: B24, IDY: <null>, VX: 12, VY: -1 }
    19) { IDX: B25, IDY: <null>, VX: 12, VY: -1 }
    20) { IDX: B28, IDY: <null>, VX: 14, VY: -1 }
    21) { IDX: B29, IDY: <null>, VX: 14, VY: -1 }
    22) { IDX: B30, IDY: <null>, VX: 15, VY: -1 }
    23) { IDX: B31, IDY: <null>, VX: 15, VY: -1 }
    24) { IDX: B32, IDY: <null>, VX: 16, VY: -1 }
    25) { IDX: B33, IDY: <null>, VX: 16, VY: -1 }
    26) { IDX: B36, IDY: <null>, VX: <null>, VY: -1 }
    27) { IDX: B37, IDY: <null>, VX: <null>, VY: -1 }
    28) { IDX: B38, IDY: <null>, VX: 19, VY: -1 }
    29) { IDX: B39, IDY: <null>, VX: 19, VY: -1 }
11) <null>
12) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: <null>, VX: <null>, VY: -1 }
     1) { IDX: C1, IDY: <null>, VX: <null>, VY: -1 }
     2) { IDX: C2, IDY: <null>, VX: <null>, VY: -1 }
13) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: <null>, VX: <null>, VY: -1 }
     1) { IDX: C1, IDY: <null>, VX: <null>, VY: -1 }
     2) { IDX: C2, IDY: <null>, VX: <null>, VY: -1 }
14) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: <null>, VX: <null>, VY: -1 }
     1) { IDX: C1, IDY: <null>, VX: <null>, VY: -1 }
     2) { IDX: C2, IDY: <null>, VX: <null>, VY: -1 }
15) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: <null>, VX: <null>, VY: -1 }
     1) { IDX: C1, IDY: <null>, VX: <null>, VY: -1 }
     2) { IDX: C2, IDY: <null>, VX: <null>, VY: -1 }
16) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: <null>, VX: <null>, VY: -1 }
     1) { IDX: C1, IDY: <null>, VX: <null>, VY: -1 }
     2) { IDX: C2, IDY: <null>, VX: <null>, VY: -1 }
17) <null>
18) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: <null>, VX: 11, VY: -1 }
     1) { IDX: D1, IDY: A12, VX: 12, VY: 12 }
     2) { IDX: D2, IDY: A13, VX: 13, VY: 13 }
19) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: B22, VX: 11, VY: 11 }
     1) { IDX: D0, IDY: B23, VX: 11, VY: 11 }
     2) { IDX: D1, IDY: B24, VX: 12, VY: 12 }
     3) { IDX: D1, IDY: B25, VX: 12, VY: 12 }
     4) { IDX: D2, IDY: <null>, VX: 13, VY: -1 }
20) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: <null>, VX: 11, VY: -1 }
     1) { IDX: D1, IDY: <null>, VX: 12, VY: -1 }
     2) { IDX: D2, IDY: <null>, VX: 13, VY: -1 }
21) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: D0, VX: 11, VY: 11 }
     1) { IDX: D1, IDY: D1, VX: 12, VY: 12 }
     2) { IDX: D2, IDY: D2, VX: 13, VY: 13 }
22) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: <null>, VX: 11, VY: -1 }
     1) { IDX: D1, IDY: <null>, VX: 12, VY: -1 }
     2) { IDX: D2, IDY: <null>, VX: 13, VY: -1 }
23) <null>
24) Sequence: Seq<{str,str,i8,i8}>
25) Sequence: Seq<{str,str,i8,i8}>
26) Sequence: Seq<{str,str,i8,i8}>
27) Sequence: Seq<{str,str,i8,i8}>
28) Sequence: Seq<{str,str,i8,i8}>
29) <null>
30) <null>
31) <null>
32) <null>
33) <null>
34) <null>
35) <null>
*** Ctx ping count: 190
    [0:3](141=0+0+141): KeyJoin(*3: *1x, *4: *2x, *3.V, *4.V, {IDX:*3.ID, IDY:*4.ID, VX:*3.V, VY:*4.V}, {IDX:*3.ID, VX:*3.V, VY:Opt<i8?>(-1)[, IDY:str(<null>)]})
    [3:5](49=7+42): CrossJoin(*1: XS, *2: YS, true, KeyJoin(*3: *1, *4: *2, *3.V, *4.V, {IDX:*3.ID, IDY:*4.ID, VX:*3.V, VY:*4.V}, {IDX:*3.ID, VX:*3.V, VY:Opt<i8?>(-1)[, IDY:str(<null>)]}))
###
> CrossJoin(X:XS, Y:YS, true,   KeyJoin(x:X, y:Y,     (V,),  (V,) , { IDX:x.ID, IDY:y.ID, VX:x.V, VY:y.V }, { IDX:ID, VX:V, VY:-1 }))
CrossJoin(X : XS, Y : YS, true, KeyJoin(x : X, y : Y, (V,), (V,), { IDX : x.ID, IDY : y.ID, VX : x.V, VY : y.V }, { IDX : ID, VX : V, VY : -1 })) : {IDX:s, IDY:s, VX:i8?, VY:i8?}**
BndKind:Call, Type:{IDX:s, IDY:s, VX:i8?, VY:i8?}**, Bnd:(Call(∂.CrossJoin([map:1] Global(XS), [map:2] Global(YS), true:b, Call(∂.KeyJoin([map:3] Scope(1), [map:4] Scope(2), (GetField(Scope(3), V),):(i8?), (GetField(Scope(4), V),):(i8?), {IDX:GetField(Scope(3), ID), IDY:GetField(Scope(4), ID), VX:GetField(Scope(3), V), VY:GetField(Scope(4), V)}, {IDX:GetField(Scope(3), ID), VX:GetField(Scope(3), V), VY:Opt<i8?>(-1:i8)[, IDY:str(<null>)]})))))
// (<ctx>, ∂.XS:{ID:s, V:i8?}**, ∂.YS:{ID:s, V:i8?}**) : {IDX:s, IDY:s, VX:i8?, VY:i8?}**
CrossJoin_2(Arr<obj>, Seq<{str,i8}>, Seq<{str,i8}>):bool
      1) ldc.i4.1
      1) ret
  Total Size: 2

KeyJoin_2(Arr<obj>, {str,i8}):(Opt<i8>)
      5) newobj (Opt<i8>)()
      1) dup
      1) ldarg.1 [{str,i8}]
      1) dup
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      5) ldfld {str,i8}::_F1:i8
      5) newobj Opt<i8>(i8)
      5) br [1]
  Label [0]:
      1) pop
      5) call static CodeGenUtil::GetDefault():Opt<i8>
  Label [1]:
      5) stfld (Opt<i8>)::_F0:Opt<i8>
      1) ret
  Total Size: 47

KeyJoin_3(Arr<obj>, {str,i8}):(Opt<i8>)
      5) newobj (Opt<i8>)()
      1) dup
      1) ldarg.1 [{str,i8}]
      1) dup
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      5) ldfld {str,i8}::_F1:i8
      5) newobj Opt<i8>(i8)
      5) br [1]
  Label [0]:
      1) pop
      5) call static CodeGenUtil::GetDefault():Opt<i8>
  Label [1]:
      5) stfld (Opt<i8>)::_F0:Opt<i8>
      1) ret
  Total Size: 47

KeyJoin_4(Arr<obj>, {str,i8}, {str,i8}):{str,str,i8,i8}
      5) newobj {str,str,i8,i8}()
      1) dup
      1) ldc.i4.3
      5) stfld {str,str,i8,i8}::_B0:u1
      1) stloc.0 [{str,str,i8,i8}]
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F0:str
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F1:str
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.4
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F1:i8
      5) stfld {str,str,i8,i8}::_F2:i8
  Label [0]:
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [1]
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.8
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F1:i8
      5) stfld {str,str,i8,i8}::_F3:i8
  Label [1]:
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 130

KeyJoin_5(Arr<obj>, {str,i8}):{str,str,i8,i8}
      5) newobj {str,str,i8,i8}()
      1) dup
      1) ldc.i4.3
      5) stfld {str,str,i8,i8}::_B0:u1
      1) stloc.0 [{str,str,i8,i8}]
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F0:str
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.4
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F1:i8
      5) stfld {str,str,i8,i8}::_F2:i8
  Label [0]:
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldc.i4.m1
      1) conv.i8
      5) stfld {str,str,i8,i8}::_F3:i8
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.8
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 101

CrossJoin_3(Arr<obj>, Seq<{str,i8}>, Seq<{str,i8}>):Seq<{str,str,i8,i8}>
      1) ldarg.1 [Seq<{str,i8}>]
      1) ldarg.2 [Seq<{str,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<{str,i8},(Opt<i8>)>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [Func<{str,i8},(Opt<i8>)>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Func<{str,i8},{str,i8},{str,str,i8,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.3
      5) ldelem [Func<{str,i8},{str,str,i8,i8}>]
      1) ldnull
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.4
      5) ldelem [EqualityComparer<(Opt<i8>)>]
      1) ldc.i4.1
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [ExecCtx]
      1) ldc.i4.0
      5) call static KeyJoinGen::Exec(Seq<{str,i8}>, Seq<{str,i8}>, Func<{str,i8},(Opt<i8>)>, Func<{str,i8},(Opt<i8>)>, Func<{str,i8},{str,i8},{str,str,i8,i8}>, Func<{str,i8},{str,str,i8,i8}>, Func<{str,i8},{str,str,i8,i8}>, EqualityComparer<(Opt<i8>)>, bool, ExecCtx, i4):Seq<{str,str,i8,i8}>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<{str,str,i8,i8}>):Seq<{str,str,i8,i8}>
      1) ret
  Total Size: 88

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):ExecCtx
      1) stloc.0 [ExecCtx]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<Seq<{str,i8}>>
      1) stloc.1 [Seq<Seq<{str,i8}>>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.2
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<Seq<{str,i8}>>
      1) stloc.2 [Seq<Seq<{str,i8}>>]
      1) ldloc.1 [Seq<Seq<{str,i8}>>]
      1) ldloc.2 [Seq<Seq<{str,i8}>>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<Seq<{str,i8}>,Seq<{str,i8}>,bool>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [MethodInfo]
      5) ldtoken [Func<Seq<{str,i8}>,Seq<{str,i8}>,Seq<{str,str,i8,i8}>>]
      5) call static Type::GetTypeFromHandle(RuntimeTypeHandle):Type
      1) ldc.i4.2
      5) newarr [obj]
      1) dup
      1) ldc.i4.0
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Arr<obj>]
      5) stelem [Arr<obj>]
      1) dup
      1) ldc.i4.1
      1) ldloc.0 [ExecCtx]
      5) stelem [ExecCtx]
      5) callvirt DynamicMethod::CreateDelegate(Type, obj):Delegate
      1) ldloc.0 [ExecCtx]
      1) ldc.i4.3
      5) call static CrossJoinGen::Exec(Seq<Seq<{str,i8}>>, Seq<Seq<{str,i8}>>, Func<Seq<{str,i8}>,Seq<{str,i8}>,bool>, Func<Seq<{str,i8}>,Seq<{str,i8}>,Seq<{str,str,i8,i8}>>, ExecCtx, i4):Seq<Seq<{str,str,i8,i8}>>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<Seq<{str,str,i8,i8}>>):Seq<Seq<{str,str,i8,i8}>>
      1) ret
  Total Size: 99

Func sig: (<ctx>:x, XS:{ID:s, V:i8?}**, YS:{ID:s, V:i8?}**) to {IDX:s, IDY:s, VX:i8?, VY:i8?}**
Sequence: Seq<Seq<{str,str,i8,i8}>>
 0) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: A0, VX: 0, VY: 0 }
     1) { IDX: A1, IDY: A1, VX: 1, VY: 1 }
     2) { IDX: A3, IDY: <null>, VX: <null>, VY: -1 }
     3) { IDX: A4, IDY: A4, VX: 4, VY: 4 }
     4) { IDX: A6, IDY: A6, VX: 6, VY: 6 }
     5) { IDX: A7, IDY: A7, VX: 7, VY: 7 }
     6) { IDX: A9, IDY: A9, VX: 9, VY: 9 }
     7) { IDX: A10, IDY: <null>, VX: <null>, VY: -1 }
     8) { IDX: A12, IDY: A12, VX: 12, VY: 12 }
     9) { IDX: A13, IDY: A13, VX: 13, VY: 13 }
    10) { IDX: A15, IDY: A15, VX: 15, VY: 15 }
    11) { IDX: A16, IDY: A16, VX: 16, VY: 16 }
    12) { IDX: A18, IDY: A18, VX: 18, VY: 18 }
    13) { IDX: A19, IDY: A19, VX: 19, VY: 19 }
 1) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: B0, VX: 0, VY: 0 }
     1) { IDX: A0, IDY: B1, VX: 0, VY: 0 }
     2) { IDX: A1, IDY: <null>, VX: 1, VY: -1 }
     3) { IDX: A3, IDY: <null>, VX: <null>, VY: -1 }
     4) { IDX: A4, IDY: B8, VX: 4, VY: 4 }
     5) { IDX: A4, IDY: B9, VX: 4, VY: 4 }
     6) { IDX: A6, IDY: B12, VX: 6, VY: 6 }
     7) { IDX: A6, IDY: B13, VX: 6, VY: 6 }
     8) { IDX: A7, IDY: B14, VX: 7, VY: 7 }
     9) { IDX: A7, IDY: B15, VX: 7, VY: 7 }
    10) { IDX: A9, IDY: <null>, VX: 9, VY: -1 }
    11) { IDX: A10, IDY: <null>, VX: <null>, VY: -1 }
    12) { IDX: A12, IDY: B24, VX: 12, VY: 12 }
    13) { IDX: A12, IDY: B25, VX: 12, VY: 12 }
    14) { IDX: A13, IDY: <null>, VX: 13, VY: -1 }
    15) { IDX: A15, IDY: B30, VX: 15, VY: 15 }
    16) { IDX: A15, IDY: B31, VX: 15, VY: 15 }
    17) { IDX: A16, IDY: B32, VX: 16, VY: 16 }
    18) { IDX: A16, IDY: B33, VX: 16, VY: 16 }
    19) { IDX: A18, IDY: <null>, VX: 18, VY: -1 }
    20) { IDX: A19, IDY: B38, VX: 19, VY: 19 }
    21) { IDX: A19, IDY: B39, VX: 19, VY: 19 }
 2) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: A1, IDY: <null>, VX: 1, VY: -1 }
     2) { IDX: A3, IDY: <null>, VX: <null>, VY: -1 }
     3) { IDX: A4, IDY: <null>, VX: 4, VY: -1 }
     4) { IDX: A6, IDY: <null>, VX: 6, VY: -1 }
     5) { IDX: A7, IDY: <null>, VX: 7, VY: -1 }
     6) { IDX: A9, IDY: <null>, VX: 9, VY: -1 }
     7) { IDX: A10, IDY: <null>, VX: <null>, VY: -1 }
     8) { IDX: A12, IDY: <null>, VX: 12, VY: -1 }
     9) { IDX: A13, IDY: <null>, VX: 13, VY: -1 }
    10) { IDX: A15, IDY: <null>, VX: 15, VY: -1 }
    11) { IDX: A16, IDY: <null>, VX: 16, VY: -1 }
    12) { IDX: A18, IDY: <null>, VX: 18, VY: -1 }
    13) { IDX: A19, IDY: <null>, VX: 19, VY: -1 }
 3) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: A1, IDY: <null>, VX: 1, VY: -1 }
     2) { IDX: A3, IDY: <null>, VX: <null>, VY: -1 }
     3) { IDX: A4, IDY: <null>, VX: 4, VY: -1 }
     4) { IDX: A6, IDY: <null>, VX: 6, VY: -1 }
     5) { IDX: A7, IDY: <null>, VX: 7, VY: -1 }
     6) { IDX: A9, IDY: <null>, VX: 9, VY: -1 }
     7) { IDX: A10, IDY: <null>, VX: <null>, VY: -1 }
     8) { IDX: A12, IDY: D1, VX: 12, VY: 12 }
     9) { IDX: A13, IDY: D2, VX: 13, VY: 13 }
    10) { IDX: A15, IDY: <null>, VX: 15, VY: -1 }
    11) { IDX: A16, IDY: <null>, VX: 16, VY: -1 }
    12) { IDX: A18, IDY: <null>, VX: 18, VY: -1 }
    13) { IDX: A19, IDY: <null>, VX: 19, VY: -1 }
 4) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: A1, IDY: <null>, VX: 1, VY: -1 }
     2) { IDX: A3, IDY: <null>, VX: <null>, VY: -1 }
     3) { IDX: A4, IDY: <null>, VX: 4, VY: -1 }
     4) { IDX: A6, IDY: <null>, VX: 6, VY: -1 }
     5) { IDX: A7, IDY: <null>, VX: 7, VY: -1 }
     6) { IDX: A9, IDY: <null>, VX: 9, VY: -1 }
     7) { IDX: A10, IDY: <null>, VX: <null>, VY: -1 }
     8) { IDX: A12, IDY: <null>, VX: 12, VY: -1 }
     9) { IDX: A13, IDY: <null>, VX: 13, VY: -1 }
    10) { IDX: A15, IDY: <null>, VX: 15, VY: -1 }
    11) { IDX: A16, IDY: <null>, VX: 16, VY: -1 }
    12) { IDX: A18, IDY: <null>, VX: 18, VY: -1 }
    13) { IDX: A19, IDY: <null>, VX: 19, VY: -1 }
 5) <null>
 6) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: A0, VX: 0, VY: 0 }
     1) { IDX: B1, IDY: A0, VX: 0, VY: 0 }
     2) { IDX: B4, IDY: <null>, VX: 2, VY: -1 }
     3) { IDX: B5, IDY: <null>, VX: 2, VY: -1 }
     4) { IDX: B6, IDY: <null>, VX: <null>, VY: -1 }
     5) { IDX: B7, IDY: <null>, VX: <null>, VY: -1 }
     6) { IDX: B8, IDY: A4, VX: 4, VY: 4 }
     7) { IDX: B9, IDY: A4, VX: 4, VY: 4 }
     8) { IDX: B12, IDY: A6, VX: 6, VY: 6 }
     9) { IDX: B13, IDY: A6, VX: 6, VY: 6 }
    10) { IDX: B14, IDY: A7, VX: 7, VY: 7 }
    11) { IDX: B15, IDY: A7, VX: 7, VY: 7 }
    12) { IDX: B16, IDY: <null>, VX: <null>, VY: -1 }
    13) { IDX: B17, IDY: <null>, VX: <null>, VY: -1 }
    14) { IDX: B20, IDY: <null>, VX: 10, VY: -1 }
    15) { IDX: B21, IDY: <null>, VX: 10, VY: -1 }
    16) { IDX: B22, IDY: <null>, VX: 11, VY: -1 }
    17) { IDX: B23, IDY: <null>, VX: 11, VY: -1 }
    18) { IDX: B24, IDY: A12, VX: 12, VY: 12 }
    19) { IDX: B25, IDY: A12, VX: 12, VY: 12 }
    20) { IDX: B28, IDY: <null>, VX: 14, VY: -1 }
    21) { IDX: B29, IDY: <null>, VX: 14, VY: -1 }
    22) { IDX: B30, IDY: A15, VX: 15, VY: 15 }
    23) { IDX: B31, IDY: A15, VX: 15, VY: 15 }
    24) { IDX: B32, IDY: A16, VX: 16, VY: 16 }
    25) { IDX: B33, IDY: A16, VX: 16, VY: 16 }
    26) { IDX: B36, IDY: <null>, VX: <null>, VY: -1 }
    27) { IDX: B37, IDY: <null>, VX: <null>, VY: -1 }
    28) { IDX: B38, IDY: A19, VX: 19, VY: 19 }
    29) { IDX: B39, IDY: A19, VX: 19, VY: 19 }
 7) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: B0, VX: 0, VY: 0 }
     1) { IDX: B0, IDY: B1, VX: 0, VY: 0 }
     2) { IDX: B1, IDY: B0, VX: 0, VY: 0 }
     3) { IDX: B1, IDY: B1, VX: 0, VY: 0 }
     4) { IDX: B4, IDY: B4, VX: 2, VY: 2 }
     5) { IDX: B4, IDY: B5, VX: 2, VY: 2 }
     6) { IDX: B5, IDY: B4, VX: 2, VY: 2 }
     7) { IDX: B5, IDY: B5, VX: 2, VY: 2 }
     8) { IDX: B6, IDY: <null>, VX: <null>, VY: -1 }
     9) { IDX: B7, IDY: <null>, VX: <null>, VY: -1 }
    10) { IDX: B8, IDY: B8, VX: 4, VY: 4 }
    11) { IDX: B8, IDY: B9, VX: 4, VY: 4 }
    12) { IDX: B9, IDY: B8, VX: 4, VY: 4 }
    13) { IDX: B9, IDY: B9, VX: 4, VY: 4 }
    14) { IDX: B12, IDY: B12, VX: 6, VY: 6 }
    15) { IDX: B12, IDY: B13, VX: 6, VY: 6 }
    16) { IDX: B13, IDY: B12, VX: 6, VY: 6 }
    17) { IDX: B13, IDY: B13, VX: 6, VY: 6 }
    18) { IDX: B14, IDY: B14, VX: 7, VY: 7 }
    19) { IDX: B14, IDY: B15, VX: 7, VY: 7 }
    20) { IDX: B15, IDY: B14, VX: 7, VY: 7 }
    21) { IDX: B15, IDY: B15, VX: 7, VY: 7 }
    22) { IDX: B16, IDY: <null>, VX: <null>, VY: -1 }
    23) { IDX: B17, IDY: <null>, VX: <null>, VY: -1 }
    24) { IDX: B20, IDY: B20, VX: 10, VY: 10 }
    25) { IDX: B20, IDY: B21, VX: 10, VY: 10 }
    26) { IDX: B21, IDY: B20, VX: 10, VY: 10 }
    27) { IDX: B21, IDY: B21, VX: 10, VY: 10 }
    28) { IDX: B22, IDY: B22, VX: 11, VY: 11 }
    29) { IDX: B22, IDY: B23, VX: 11, VY: 11 }
    30) { IDX: B23, IDY: B22, VX: 11, VY: 11 }
    31) { IDX: B23, IDY: B23, VX: 11, VY: 11 }
    32) { IDX: B24, IDY: B24, VX: 12, VY: 12 }
    33) { IDX: B24, IDY: B25, VX: 12, VY: 12 }
    34) { IDX: B25, IDY: B24, VX: 12, VY: 12 }
    35) { IDX: B25, IDY: B25, VX: 12, VY: 12 }
    36) { IDX: B28, IDY: B28, VX: 14, VY: 14 }
    37) { IDX: B28, IDY: B29, VX: 14, VY: 14 }
    38) { IDX: B29, IDY: B28, VX: 14, VY: 14 }
    39) { IDX: B29, IDY: B29, VX: 14, VY: 14 }
    40) { IDX: B30, IDY: B30, VX: 15, VY: 15 }
    41) { IDX: B30, IDY: B31, VX: 15, VY: 15 }
    42) { IDX: B31, IDY: B30, VX: 15, VY: 15 }
    43) { IDX: B31, IDY: B31, VX: 15, VY: 15 }
    44) { IDX: B32, IDY: B32, VX: 16, VY: 16 }
    45) { IDX: B32, IDY: B33, VX: 16, VY: 16 }
    46) { IDX: B33, IDY: B32, VX: 16, VY: 16 }
    47) { IDX: B33, IDY: B33, VX: 16, VY: 16 }
    48) { IDX: B36, IDY: <null>, VX: <null>, VY: -1 }
    49) { IDX: B37, IDY: <null>, VX: <null>, VY: -1 }
    50) { IDX: B38, IDY: B38, VX: 19, VY: 19 }
    51) { IDX: B38, IDY: B39, VX: 19, VY: 19 }
    52) { IDX: B39, IDY: B38, VX: 19, VY: 19 }
    53) { IDX: B39, IDY: B39, VX: 19, VY: 19 }
 8) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: B1, IDY: <null>, VX: 0, VY: -1 }
     2) { IDX: B4, IDY: <null>, VX: 2, VY: -1 }
     3) { IDX: B5, IDY: <null>, VX: 2, VY: -1 }
     4) { IDX: B6, IDY: <null>, VX: <null>, VY: -1 }
     5) { IDX: B7, IDY: <null>, VX: <null>, VY: -1 }
     6) { IDX: B8, IDY: <null>, VX: 4, VY: -1 }
     7) { IDX: B9, IDY: <null>, VX: 4, VY: -1 }
     8) { IDX: B12, IDY: <null>, VX: 6, VY: -1 }
     9) { IDX: B13, IDY: <null>, VX: 6, VY: -1 }
    10) { IDX: B14, IDY: <null>, VX: 7, VY: -1 }
    11) { IDX: B15, IDY: <null>, VX: 7, VY: -1 }
    12) { IDX: B16, IDY: <null>, VX: <null>, VY: -1 }
    13) { IDX: B17, IDY: <null>, VX: <null>, VY: -1 }
    14) { IDX: B20, IDY: <null>, VX: 10, VY: -1 }
    15) { IDX: B21, IDY: <null>, VX: 10, VY: -1 }
    16) { IDX: B22, IDY: <null>, VX: 11, VY: -1 }
    17) { IDX: B23, IDY: <null>, VX: 11, VY: -1 }
    18) { IDX: B24, IDY: <null>, VX: 12, VY: -1 }
    19) { IDX: B25, IDY: <null>, VX: 12, VY: -1 }
    20) { IDX: B28, IDY: <null>, VX: 14, VY: -1 }
    21) { IDX: B29, IDY: <null>, VX: 14, VY: -1 }
    22) { IDX: B30, IDY: <null>, VX: 15, VY: -1 }
    23) { IDX: B31, IDY: <null>, VX: 15, VY: -1 }
    24) { IDX: B32, IDY: <null>, VX: 16, VY: -1 }
    25) { IDX: B33, IDY: <null>, VX: 16, VY: -1 }
    26) { IDX: B36, IDY: <null>, VX: <null>, VY: -1 }
    27) { IDX: B37, IDY: <null>, VX: <null>, VY: -1 }
    28) { IDX: B38, IDY: <null>, VX: 19, VY: -1 }
    29) { IDX: B39, IDY: <null>, VX: 19, VY: -1 }
 9) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: B1, IDY: <null>, VX: 0, VY: -1 }
     2) { IDX: B4, IDY: <null>, VX: 2, VY: -1 }
     3) { IDX: B5, IDY: <null>, VX: 2, VY: -1 }
     4) { IDX: B6, IDY: <null>, VX: <null>, VY: -1 }
     5) { IDX: B7, IDY: <null>, VX: <null>, VY: -1 }
     6) { IDX: B8, IDY: <null>, VX: 4, VY: -1 }
     7) { IDX: B9, IDY: <null>, VX: 4, VY: -1 }
     8) { IDX: B12, IDY: <null>, VX: 6, VY: -1 }
     9) { IDX: B13, IDY: <null>, VX: 6, VY: -1 }
    10) { IDX: B14, IDY: <null>, VX: 7, VY: -1 }
    11) { IDX: B15, IDY: <null>, VX: 7, VY: -1 }
    12) { IDX: B16, IDY: <null>, VX: <null>, VY: -1 }
    13) { IDX: B17, IDY: <null>, VX: <null>, VY: -1 }
    14) { IDX: B20, IDY: <null>, VX: 10, VY: -1 }
    15) { IDX: B21, IDY: <null>, VX: 10, VY: -1 }
    16) { IDX: B22, IDY: D0, VX: 11, VY: 11 }
    17) { IDX: B23, IDY: D0, VX: 11, VY: 11 }
    18) { IDX: B24, IDY: D1, VX: 12, VY: 12 }
    19) { IDX: B25, IDY: D1, VX: 12, VY: 12 }
    20) { IDX: B28, IDY: <null>, VX: 14, VY: -1 }
    21) { IDX: B29, IDY: <null>, VX: 14, VY: -1 }
    22) { IDX: B30, IDY: <null>, VX: 15, VY: -1 }
    23) { IDX: B31, IDY: <null>, VX: 15, VY: -1 }
    24) { IDX: B32, IDY: <null>, VX: 16, VY: -1 }
    25) { IDX: B33, IDY: <null>, VX: 16, VY: -1 }
    26) { IDX: B36, IDY: <null>, VX: <null>, VY: -1 }
    27) { IDX: B37, IDY: <null>, VX: <null>, VY: -1 }
    28) { IDX: B38, IDY: <null>, VX: 19, VY: -1 }
    29) { IDX: B39, IDY: <null>, VX: 19, VY: -1 }
10) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: B1, IDY: <null>, VX: 0, VY: -1 }
     2) { IDX: B4, IDY: <null>, VX: 2, VY: -1 }
     3) { IDX: B5, IDY: <null>, VX: 2, VY: -1 }
     4) { IDX: B6, IDY: <null>, VX: <null>, VY: -1 }
     5) { IDX: B7, IDY: <null>, VX: <null>, VY: -1 }
     6) { IDX: B8, IDY: <null>, VX: 4, VY: -1 }
     7) { IDX: B9, IDY: <null>, VX: 4, VY: -1 }
     8) { IDX: B12, IDY: <null>, VX: 6, VY: -1 }
     9) { IDX: B13, IDY: <null>, VX: 6, VY: -1 }
    10) { IDX: B14, IDY: <null>, VX: 7, VY: -1 }
    11) { IDX: B15, IDY: <null>, VX: 7, VY: -1 }
    12) { IDX: B16, IDY: <null>, VX: <null>, VY: -1 }
    13) { IDX: B17, IDY: <null>, VX: <null>, VY: -1 }
    14) { IDX: B20, IDY: <null>, VX: 10, VY: -1 }
    15) { IDX: B21, IDY: <null>, VX: 10, VY: -1 }
    16) { IDX: B22, IDY: <null>, VX: 11, VY: -1 }
    17) { IDX: B23, IDY: <null>, VX: 11, VY: -1 }
    18) { IDX: B24, IDY: <null>, VX: 12, VY: -1 }
    19) { IDX: B25, IDY: <null>, VX: 12, VY: -1 }
    20) { IDX: B28, IDY: <null>, VX: 14, VY: -1 }
    21) { IDX: B29, IDY: <null>, VX: 14, VY: -1 }
    22) { IDX: B30, IDY: <null>, VX: 15, VY: -1 }
    23) { IDX: B31, IDY: <null>, VX: 15, VY: -1 }
    24) { IDX: B32, IDY: <null>, VX: 16, VY: -1 }
    25) { IDX: B33, IDY: <null>, VX: 16, VY: -1 }
    26) { IDX: B36, IDY: <null>, VX: <null>, VY: -1 }
    27) { IDX: B37, IDY: <null>, VX: <null>, VY: -1 }
    28) { IDX: B38, IDY: <null>, VX: 19, VY: -1 }
    29) { IDX: B39, IDY: <null>, VX: 19, VY: -1 }
11) <null>
12) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: <null>, VX: <null>, VY: -1 }
     1) { IDX: C1, IDY: <null>, VX: <null>, VY: -1 }
     2) { IDX: C2, IDY: <null>, VX: <null>, VY: -1 }
13) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: <null>, VX: <null>, VY: -1 }
     1) { IDX: C1, IDY: <null>, VX: <null>, VY: -1 }
     2) { IDX: C2, IDY: <null>, VX: <null>, VY: -1 }
14) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: <null>, VX: <null>, VY: -1 }
     1) { IDX: C1, IDY: <null>, VX: <null>, VY: -1 }
     2) { IDX: C2, IDY: <null>, VX: <null>, VY: -1 }
15) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: <null>, VX: <null>, VY: -1 }
     1) { IDX: C1, IDY: <null>, VX: <null>, VY: -1 }
     2) { IDX: C2, IDY: <null>, VX: <null>, VY: -1 }
16) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: <null>, VX: <null>, VY: -1 }
     1) { IDX: C1, IDY: <null>, VX: <null>, VY: -1 }
     2) { IDX: C2, IDY: <null>, VX: <null>, VY: -1 }
17) <null>
18) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: <null>, VX: 11, VY: -1 }
     1) { IDX: D1, IDY: A12, VX: 12, VY: 12 }
     2) { IDX: D2, IDY: A13, VX: 13, VY: 13 }
19) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: B22, VX: 11, VY: 11 }
     1) { IDX: D0, IDY: B23, VX: 11, VY: 11 }
     2) { IDX: D1, IDY: B24, VX: 12, VY: 12 }
     3) { IDX: D1, IDY: B25, VX: 12, VY: 12 }
     4) { IDX: D2, IDY: <null>, VX: 13, VY: -1 }
20) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: <null>, VX: 11, VY: -1 }
     1) { IDX: D1, IDY: <null>, VX: 12, VY: -1 }
     2) { IDX: D2, IDY: <null>, VX: 13, VY: -1 }
21) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: D0, VX: 11, VY: 11 }
     1) { IDX: D1, IDY: D1, VX: 12, VY: 12 }
     2) { IDX: D2, IDY: D2, VX: 13, VY: 13 }
22) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: <null>, VX: 11, VY: -1 }
     1) { IDX: D1, IDY: <null>, VX: 12, VY: -1 }
     2) { IDX: D2, IDY: <null>, VX: 13, VY: -1 }
23) <null>
24) Sequence: Seq<{str,str,i8,i8}>
25) Sequence: Seq<{str,str,i8,i8}>
26) Sequence: Seq<{str,str,i8,i8}>
27) Sequence: Seq<{str,str,i8,i8}>
28) Sequence: Seq<{str,str,i8,i8}>
29) <null>
30) <null>
31) <null>
32) <null>
33) <null>
34) <null>
35) <null>
*** Ctx ping count: 190
    [0:3](141=0+0+141): KeyJoin(*3: *1x, *4: *2x, (*3.V,), (*4.V,), {IDX:*3.ID, IDY:*4.ID, VX:*3.V, VY:*4.V}, {IDX:*3.ID, VX:*3.V, VY:Opt<i8?>(-1)[, IDY:str(<null>)]})
    [3:5](49=7+42): CrossJoin(*1: XS, *2: YS, true, KeyJoin(*3: *1, *4: *2, (*3.V,), (*4.V,), {IDX:*3.ID, IDY:*4.ID, VX:*3.V, VY:*4.V}, {IDX:*3.ID, VX:*3.V, VY:Opt<i8?>(-1)[, IDY:str(<null>)]}))
###
> CrossJoin(X:XS, Y:YS, true, CrossJoin(x:X, y:Y, Wrap(x.V  = y.V), { IDX:x.ID, IDY:y.ID, VX:x.V, VY:y.V }, { IDX:ID, VX:V, VY:-1 }, { IDY:ID, VX:-1, VY:V }))
CrossJoin(X : XS, Y : YS, true, CrossJoin(x : X, y : Y, Wrap(x.V @= y.V), { IDX : x.ID, IDY : y.ID, VX : x.V, VY : y.V }, { IDX : ID, VX : V, VY : -1 }, { IDY : ID, VX : -1, VY : V })) : {IDX:s, IDY:s, VX:i8?, VY:i8?}**
BndKind:Call, Type:{IDX:s, IDY:s, VX:i8?, VY:i8?}**, Bnd:(Call(∂.CrossJoin([map:1] Global(XS), [map:2] Global(YS), true:b, Call(∂.CrossJoin([map:3] Scope(1), [map:4] Scope(2), Call(∂.Test.Wrap(Cmp(GetField(Scope(3), V) @= GetField(Scope(4), V))):b), {IDX:GetField(Scope(3), ID), IDY:GetField(Scope(4), ID), VX:GetField(Scope(3), V), VY:GetField(Scope(4), V)}, {IDX:GetField(Scope(3), ID), VX:GetField(Scope(3), V), VY:Opt<i8?>(-1:i8)[, IDY:str(<null>)]}, {IDY:GetField(Scope(4), ID), VX:Opt<i8?>(-1:i8), VY:GetField(Scope(4), V)[, IDX:str(<null>)]})))))
// (<ctx>, ∂.XS:{ID:s, V:i8?}**, ∂.YS:{ID:s, V:i8?}**) : {IDX:s, IDY:s, VX:i8?, VY:i8?}**
CrossJoin_2(Arr<obj>, Seq<{str,i8}>, Seq<{str,i8}>):bool
      1) ldc.i4.1
      1) ret
  Total Size: 2

CrossJoin_2(Arr<obj>, {str,i8}, {str,i8}):bool
      1) ldarg.1 [{str,i8}]
      1) dup
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      5) ldfld {str,i8}::_F1:i8
      5) newobj Opt<i8>(i8)
      5) br [1]
  Label [0]:
      1) pop
      5) call static CodeGenUtil::GetDefault():Opt<i8>
  Label [1]:
      1) stloc.0 [Opt<i8>]
      1) ldarg.2 [{str,i8}]
      1) dup
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [2]
      5) ldfld {str,i8}::_F1:i8
      5) newobj Opt<i8>(i8)
      5) br [3]
  Label [2]:
      1) pop
      5) call static CodeGenUtil::GetDefault():Opt<i8>
  Label [3]:
      1) stloc.1 [Opt<i8>]
      2) ldloca.s [Opt<i8> (0)]
      5) call Opt<i8>::get_HasValue():bool
      2) ldloca.s [Opt<i8> (1)]
      5) call Opt<i8>::get_HasValue():bool
      5) bne.un [4]
      2) ldloca.s [Opt<i8> (0)]
      5) call Opt<i8>::GetValueOrDefault():i8
      2) ldloca.s [Opt<i8> (1)]
      5) call Opt<i8>::GetValueOrDefault():i8
      2) ceq
      5) br [5]
  Label [4]:
      1) ldc.i4.0
  Label [5]:
      5) call static WrapFuncGen::Exec(bool):bool
      1) ret
  Total Size: 119

CrossJoin_3(Arr<obj>, {str,i8}, {str,i8}):{str,str,i8,i8}
      5) newobj {str,str,i8,i8}()
      1) dup
      1) ldc.i4.3
      5) stfld {str,str,i8,i8}::_B0:u1
      1) stloc.0 [{str,str,i8,i8}]
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F0:str
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F1:str
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.4
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F1:i8
      5) stfld {str,str,i8,i8}::_F2:i8
  Label [0]:
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [1]
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.8
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F1:i8
      5) stfld {str,str,i8,i8}::_F3:i8
  Label [1]:
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 130

CrossJoin_4(Arr<obj>, {str,i8}):{str,str,i8,i8}
      5) newobj {str,str,i8,i8}()
      1) dup
      1) ldc.i4.3
      5) stfld {str,str,i8,i8}::_B0:u1
      1) stloc.0 [{str,str,i8,i8}]
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F0:str
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.4
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F1:i8
      5) stfld {str,str,i8,i8}::_F2:i8
  Label [0]:
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldc.i4.m1
      1) conv.i8
      5) stfld {str,str,i8,i8}::_F3:i8
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.8
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 101

CrossJoin_5(Arr<obj>, {str,i8}):{str,str,i8,i8}
      5) newobj {str,str,i8,i8}()
      1) dup
      1) ldc.i4.3
      5) stfld {str,str,i8,i8}::_B0:u1
      1) stloc.0 [{str,str,i8,i8}]
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F1:str
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldc.i4.m1
      1) conv.i8
      5) stfld {str,str,i8,i8}::_F2:i8
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.4
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.8
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F1:i8
      5) stfld {str,str,i8,i8}::_F3:i8
  Label [0]:
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 101

CrossJoin_3(Arr<obj>, Seq<{str,i8}>, Seq<{str,i8}>):Seq<{str,str,i8,i8}>
      1) ldarg.1 [Seq<{str,i8}>]
      1) ldarg.2 [Seq<{str,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<{str,i8},{str,i8},bool>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [Func<{str,i8},{str,i8},{str,str,i8,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Func<{str,i8},{str,str,i8,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.3
      5) ldelem [Func<{str,i8},{str,str,i8,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [ExecCtx]
      1) ldc.i4.0
      5) call static CrossJoinGen::Exec(Seq<{str,i8}>, Seq<{str,i8}>, Func<{str,i8},{str,i8},bool>, Func<{str,i8},{str,i8},{str,str,i8,i8}>, Func<{str,i8},{str,str,i8,i8}>, Func<{str,i8},{str,str,i8,i8}>, ExecCtx, i4):Seq<{str,str,i8,i8}>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<{str,str,i8,i8}>):Seq<{str,str,i8,i8}>
      1) ret
  Total Size: 73

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):ExecCtx
      1) stloc.0 [ExecCtx]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<Seq<{str,i8}>>
      1) stloc.1 [Seq<Seq<{str,i8}>>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.2
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<Seq<{str,i8}>>
      1) stloc.2 [Seq<Seq<{str,i8}>>]
      1) ldloc.1 [Seq<Seq<{str,i8}>>]
      1) ldloc.2 [Seq<Seq<{str,i8}>>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<Seq<{str,i8}>,Seq<{str,i8}>,bool>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [MethodInfo]
      5) ldtoken [Func<Seq<{str,i8}>,Seq<{str,i8}>,Seq<{str,str,i8,i8}>>]
      5) call static Type::GetTypeFromHandle(RuntimeTypeHandle):Type
      1) ldc.i4.2
      5) newarr [obj]
      1) dup
      1) ldc.i4.0
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Arr<obj>]
      5) stelem [Arr<obj>]
      1) dup
      1) ldc.i4.1
      1) ldloc.0 [ExecCtx]
      5) stelem [ExecCtx]
      5) callvirt DynamicMethod::CreateDelegate(Type, obj):Delegate
      1) ldloc.0 [ExecCtx]
      1) ldc.i4.2
      5) call static CrossJoinGen::Exec(Seq<Seq<{str,i8}>>, Seq<Seq<{str,i8}>>, Func<Seq<{str,i8}>,Seq<{str,i8}>,bool>, Func<Seq<{str,i8}>,Seq<{str,i8}>,Seq<{str,str,i8,i8}>>, ExecCtx, i4):Seq<Seq<{str,str,i8,i8}>>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<Seq<{str,str,i8,i8}>>):Seq<Seq<{str,str,i8,i8}>>
      1) ret
  Total Size: 99

Func sig: (<ctx>:x, XS:{ID:s, V:i8?}**, YS:{ID:s, V:i8?}**) to {IDX:s, IDY:s, VX:i8?, VY:i8?}**
Sequence: Seq<Seq<{str,str,i8,i8}>>
 0) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: A0, VX: 0, VY: 0 }
     1) { IDX: A1, IDY: A1, VX: 1, VY: 1 }
     2) { IDX: A3, IDY: A3, VX: <null>, VY: <null> }
     3) { IDX: A3, IDY: A10, VX: <null>, VY: <null> }
     4) { IDX: A4, IDY: A4, VX: 4, VY: 4 }
     5) { IDX: A6, IDY: A6, VX: 6, VY: 6 }
     6) { IDX: A7, IDY: A7, VX: 7, VY: 7 }
     7) { IDX: A9, IDY: A9, VX: 9, VY: 9 }
     8) { IDX: A10, IDY: A3, VX: <null>, VY: <null> }
     9) { IDX: A10, IDY: A10, VX: <null>, VY: <null> }
    10) { IDX: A12, IDY: A12, VX: 12, VY: 12 }
    11) { IDX: A13, IDY: A13, VX: 13, VY: 13 }
    12) { IDX: A15, IDY: A15, VX: 15, VY: 15 }
    13) { IDX: A16, IDY: A16, VX: 16, VY: 16 }
    14) { IDX: A18, IDY: A18, VX: 18, VY: 18 }
    15) { IDX: A19, IDY: A19, VX: 19, VY: 19 }
 1) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: B0, VX: 0, VY: 0 }
     1) { IDX: A0, IDY: B1, VX: 0, VY: 0 }
     2) { IDX: A1, IDY: <null>, VX: 1, VY: -1 }
     3) { IDX: A3, IDY: B6, VX: <null>, VY: <null> }
     4) { IDX: A3, IDY: B7, VX: <null>, VY: <null> }
     5) { IDX: A3, IDY: B16, VX: <null>, VY: <null> }
     6) { IDX: A3, IDY: B17, VX: <null>, VY: <null> }
     7) { IDX: A3, IDY: B36, VX: <null>, VY: <null> }
     8) { IDX: A3, IDY: B37, VX: <null>, VY: <null> }
     9) { IDX: A4, IDY: B8, VX: 4, VY: 4 }
    10) { IDX: A4, IDY: B9, VX: 4, VY: 4 }
    11) { IDX: A6, IDY: B12, VX: 6, VY: 6 }
    12) { IDX: A6, IDY: B13, VX: 6, VY: 6 }
    13) { IDX: A7, IDY: B14, VX: 7, VY: 7 }
    14) { IDX: A7, IDY: B15, VX: 7, VY: 7 }
    15) { IDX: A9, IDY: <null>, VX: 9, VY: -1 }
    16) { IDX: A10, IDY: B6, VX: <null>, VY: <null> }
    17) { IDX: A10, IDY: B7, VX: <null>, VY: <null> }
    18) { IDX: A10, IDY: B16, VX: <null>, VY: <null> }
    19) { IDX: A10, IDY: B17, VX: <null>, VY: <null> }
    20) { IDX: A10, IDY: B36, VX: <null>, VY: <null> }
    21) { IDX: A10, IDY: B37, VX: <null>, VY: <null> }
    22) { IDX: A12, IDY: B24, VX: 12, VY: 12 }
    23) { IDX: A12, IDY: B25, VX: 12, VY: 12 }
    24) { IDX: A13, IDY: <null>, VX: 13, VY: -1 }
    25) { IDX: A15, IDY: B30, VX: 15, VY: 15 }
    26) { IDX: A15, IDY: B31, VX: 15, VY: 15 }
    27) { IDX: A16, IDY: B32, VX: 16, VY: 16 }
    28) { IDX: A16, IDY: B33, VX: 16, VY: 16 }
    29) { IDX: A18, IDY: <null>, VX: 18, VY: -1 }
    30) { IDX: A19, IDY: B38, VX: 19, VY: 19 }
    31) { IDX: A19, IDY: B39, VX: 19, VY: 19 }
    32) { IDX: <null>, IDY: B4, VX: -1, VY: 2 }
    33) { IDX: <null>, IDY: B5, VX: -1, VY: 2 }
    34) { IDX: <null>, IDY: B20, VX: -1, VY: 10 }
    35) { IDX: <null>, IDY: B21, VX: -1, VY: 10 }
    36) { IDX: <null>, IDY: B22, VX: -1, VY: 11 }
    37) { IDX: <null>, IDY: B23, VX: -1, VY: 11 }
    38) { IDX: <null>, IDY: B28, VX: -1, VY: 14 }
    39) { IDX: <null>, IDY: B29, VX: -1, VY: 14 }
 2) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: A1, IDY: <null>, VX: 1, VY: -1 }
     2) { IDX: A3, IDY: C0, VX: <null>, VY: <null> }
     3) { IDX: A3, IDY: C1, VX: <null>, VY: <null> }
     4) { IDX: A3, IDY: C2, VX: <null>, VY: <null> }
     5) { IDX: A4, IDY: <null>, VX: 4, VY: -1 }
     6) { IDX: A6, IDY: <null>, VX: 6, VY: -1 }
     7) { IDX: A7, IDY: <null>, VX: 7, VY: -1 }
     8) { IDX: A9, IDY: <null>, VX: 9, VY: -1 }
     9) { IDX: A10, IDY: C0, VX: <null>, VY: <null> }
    10) { IDX: A10, IDY: C1, VX: <null>, VY: <null> }
    11) { IDX: A10, IDY: C2, VX: <null>, VY: <null> }
    12) { IDX: A12, IDY: <null>, VX: 12, VY: -1 }
    13) { IDX: A13, IDY: <null>, VX: 13, VY: -1 }
    14) { IDX: A15, IDY: <null>, VX: 15, VY: -1 }
    15) { IDX: A16, IDY: <null>, VX: 16, VY: -1 }
    16) { IDX: A18, IDY: <null>, VX: 18, VY: -1 }
    17) { IDX: A19, IDY: <null>, VX: 19, VY: -1 }
 3) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: A1, IDY: <null>, VX: 1, VY: -1 }
     2) { IDX: A3, IDY: <null>, VX: <null>, VY: -1 }
     3) { IDX: A4, IDY: <null>, VX: 4, VY: -1 }
     4) { IDX: A6, IDY: <null>, VX: 6, VY: -1 }
     5) { IDX: A7, IDY: <null>, VX: 7, VY: -1 }
     6) { IDX: A9, IDY: <null>, VX: 9, VY: -1 }
     7) { IDX: A10, IDY: <null>, VX: <null>, VY: -1 }
     8) { IDX: A12, IDY: D1, VX: 12, VY: 12 }
     9) { IDX: A13, IDY: D2, VX: 13, VY: 13 }
    10) { IDX: A15, IDY: <null>, VX: 15, VY: -1 }
    11) { IDX: A16, IDY: <null>, VX: 16, VY: -1 }
    12) { IDX: A18, IDY: <null>, VX: 18, VY: -1 }
    13) { IDX: A19, IDY: <null>, VX: 19, VY: -1 }
    14) { IDX: <null>, IDY: D0, VX: -1, VY: 11 }
 4) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: A1, IDY: <null>, VX: 1, VY: -1 }
     2) { IDX: A3, IDY: <null>, VX: <null>, VY: -1 }
     3) { IDX: A4, IDY: <null>, VX: 4, VY: -1 }
     4) { IDX: A6, IDY: <null>, VX: 6, VY: -1 }
     5) { IDX: A7, IDY: <null>, VX: 7, VY: -1 }
     6) { IDX: A9, IDY: <null>, VX: 9, VY: -1 }
     7) { IDX: A10, IDY: <null>, VX: <null>, VY: -1 }
     8) { IDX: A12, IDY: <null>, VX: 12, VY: -1 }
     9) { IDX: A13, IDY: <null>, VX: 13, VY: -1 }
    10) { IDX: A15, IDY: <null>, VX: 15, VY: -1 }
    11) { IDX: A16, IDY: <null>, VX: 16, VY: -1 }
    12) { IDX: A18, IDY: <null>, VX: 18, VY: -1 }
    13) { IDX: A19, IDY: <null>, VX: 19, VY: -1 }
 5) <null>
 6) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: A0, VX: 0, VY: 0 }
     1) { IDX: B1, IDY: A0, VX: 0, VY: 0 }
     2) { IDX: B4, IDY: <null>, VX: 2, VY: -1 }
     3) { IDX: B5, IDY: <null>, VX: 2, VY: -1 }
     4) { IDX: B6, IDY: A3, VX: <null>, VY: <null> }
     5) { IDX: B6, IDY: A10, VX: <null>, VY: <null> }
     6) { IDX: B7, IDY: A3, VX: <null>, VY: <null> }
     7) { IDX: B7, IDY: A10, VX: <null>, VY: <null> }
     8) { IDX: B8, IDY: A4, VX: 4, VY: 4 }
     9) { IDX: B9, IDY: A4, VX: 4, VY: 4 }
    10) { IDX: B12, IDY: A6, VX: 6, VY: 6 }
    11) { IDX: B13, IDY: A6, VX: 6, VY: 6 }
    12) { IDX: B14, IDY: A7, VX: 7, VY: 7 }
    13) { IDX: B15, IDY: A7, VX: 7, VY: 7 }
    14) { IDX: B16, IDY: A3, VX: <null>, VY: <null> }
    15) { IDX: B16, IDY: A10, VX: <null>, VY: <null> }
    16) { IDX: B17, IDY: A3, VX: <null>, VY: <null> }
    17) { IDX: B17, IDY: A10, VX: <null>, VY: <null> }
    18) { IDX: B20, IDY: <null>, VX: 10, VY: -1 }
    19) { IDX: B21, IDY: <null>, VX: 10, VY: -1 }
    20) { IDX: B22, IDY: <null>, VX: 11, VY: -1 }
    21) { IDX: B23, IDY: <null>, VX: 11, VY: -1 }
    22) { IDX: B24, IDY: A12, VX: 12, VY: 12 }
    23) { IDX: B25, IDY: A12, VX: 12, VY: 12 }
    24) { IDX: B28, IDY: <null>, VX: 14, VY: -1 }
    25) { IDX: B29, IDY: <null>, VX: 14, VY: -1 }
    26) { IDX: B30, IDY: A15, VX: 15, VY: 15 }
    27) { IDX: B31, IDY: A15, VX: 15, VY: 15 }
    28) { IDX: B32, IDY: A16, VX: 16, VY: 16 }
    29) { IDX: B33, IDY: A16, VX: 16, VY: 16 }
    30) { IDX: B36, IDY: A3, VX: <null>, VY: <null> }
    31) { IDX: B36, IDY: A10, VX: <null>, VY: <null> }
    32) { IDX: B37, IDY: A3, VX: <null>, VY: <null> }
    33) { IDX: B37, IDY: A10, VX: <null>, VY: <null> }
    34) { IDX: B38, IDY: A19, VX: 19, VY: 19 }
    35) { IDX: B39, IDY: A19, VX: 19, VY: 19 }
    36) { IDX: <null>, IDY: A1, VX: -1, VY: 1 }
    37) { IDX: <null>, IDY: A9, VX: -1, VY: 9 }
    38) { IDX: <null>, IDY: A13, VX: -1, VY: 13 }
    39) { IDX: <null>, IDY: A18, VX: -1, VY: 18 }
 7) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: B0, VX: 0, VY: 0 }
     1) { IDX: B0, IDY: B1, VX: 0, VY: 0 }
     2) { IDX: B1, IDY: B0, VX: 0, VY: 0 }
     3) { IDX: B1, IDY: B1, VX: 0, VY: 0 }
     4) { IDX: B4, IDY: B4, VX: 2, VY: 2 }
     5) { IDX: B4, IDY: B5, VX: 2, VY: 2 }
     6) { IDX: B5, IDY: B4, VX: 2, VY: 2 }
     7) { IDX: B5, IDY: B5, VX: 2, VY: 2 }
     8) { IDX: B6, IDY: B6, VX: <null>, VY: <null> }
     9) { IDX: B6, IDY: B7, VX: <null>, VY: <null> }
    10) { IDX: B6, IDY: B16, VX: <null>, VY: <null> }
    11) { IDX: B6, IDY: B17, VX: <null>, VY: <null> }
    12) { IDX: B6, IDY: B36, VX: <null>, VY: <null> }
    13) { IDX: B6, IDY: B37, VX: <null>, VY: <null> }
    14) { IDX: B7, IDY: B6, VX: <null>, VY: <null> }
    15) { IDX: B7, IDY: B7, VX: <null>, VY: <null> }
    16) { IDX: B7, IDY: B16, VX: <null>, VY: <null> }
    17) { IDX: B7, IDY: B17, VX: <null>, VY: <null> }
    18) { IDX: B7, IDY: B36, VX: <null>, VY: <null> }
    19) { IDX: B7, IDY: B37, VX: <null>, VY: <null> }
    20) { IDX: B8, IDY: B8, VX: 4, VY: 4 }
    21) { IDX: B8, IDY: B9, VX: 4, VY: 4 }
    22) { IDX: B9, IDY: B8, VX: 4, VY: 4 }
    23) { IDX: B9, IDY: B9, VX: 4, VY: 4 }
    24) { IDX: B12, IDY: B12, VX: 6, VY: 6 }
    25) { IDX: B12, IDY: B13, VX: 6, VY: 6 }
    26) { IDX: B13, IDY: B12, VX: 6, VY: 6 }
    27) { IDX: B13, IDY: B13, VX: 6, VY: 6 }
    28) { IDX: B14, IDY: B14, VX: 7, VY: 7 }
    29) { IDX: B14, IDY: B15, VX: 7, VY: 7 }
    30) { IDX: B15, IDY: B14, VX: 7, VY: 7 }
    31) { IDX: B15, IDY: B15, VX: 7, VY: 7 }
    32) { IDX: B16, IDY: B6, VX: <null>, VY: <null> }
    33) { IDX: B16, IDY: B7, VX: <null>, VY: <null> }
    34) { IDX: B16, IDY: B16, VX: <null>, VY: <null> }
    35) { IDX: B16, IDY: B17, VX: <null>, VY: <null> }
    36) { IDX: B16, IDY: B36, VX: <null>, VY: <null> }
    37) { IDX: B16, IDY: B37, VX: <null>, VY: <null> }
    38) { IDX: B17, IDY: B6, VX: <null>, VY: <null> }
    39) { IDX: B17, IDY: B7, VX: <null>, VY: <null> }
    40) { IDX: B17, IDY: B16, VX: <null>, VY: <null> }
    41) { IDX: B17, IDY: B17, VX: <null>, VY: <null> }
    42) { IDX: B17, IDY: B36, VX: <null>, VY: <null> }
    43) { IDX: B17, IDY: B37, VX: <null>, VY: <null> }
    44) { IDX: B20, IDY: B20, VX: 10, VY: 10 }
    45) { IDX: B20, IDY: B21, VX: 10, VY: 10 }
    46) { IDX: B21, IDY: B20, VX: 10, VY: 10 }
    47) { IDX: B21, IDY: B21, VX: 10, VY: 10 }
    48) { IDX: B22, IDY: B22, VX: 11, VY: 11 }
    49) { IDX: B22, IDY: B23, VX: 11, VY: 11 }
    50) { IDX: B23, IDY: B22, VX: 11, VY: 11 }
    51) { IDX: B23, IDY: B23, VX: 11, VY: 11 }
    52) { IDX: B24, IDY: B24, VX: 12, VY: 12 }
    53) { IDX: B24, IDY: B25, VX: 12, VY: 12 }
    54) { IDX: B25, IDY: B24, VX: 12, VY: 12 }
    55) { IDX: B25, IDY: B25, VX: 12, VY: 12 }
    56) { IDX: B28, IDY: B28, VX: 14, VY: 14 }
    57) { IDX: B28, IDY: B29, VX: 14, VY: 14 }
    58) { IDX: B29, IDY: B28, VX: 14, VY: 14 }
    59) { IDX: B29, IDY: B29, VX: 14, VY: 14 }
    60) { IDX: B30, IDY: B30, VX: 15, VY: 15 }
    61) { IDX: B30, IDY: B31, VX: 15, VY: 15 }
    62) { IDX: B31, IDY: B30, VX: 15, VY: 15 }
    63) { IDX: B31, IDY: B31, VX: 15, VY: 15 }
    64) { IDX: B32, IDY: B32, VX: 16, VY: 16 }
    65) { IDX: B32, IDY: B33, VX: 16, VY: 16 }
    66) { IDX: B33, IDY: B32, VX: 16, VY: 16 }
    67) { IDX: B33, IDY: B33, VX: 16, VY: 16 }
    68) { IDX: B36, IDY: B6, VX: <null>, VY: <null> }
    69) { IDX: B36, IDY: B7, VX: <null>, VY: <null> }
    70) { IDX: B36, IDY: B16, VX: <null>, VY: <null> }
    71) { IDX: B36, IDY: B17, VX: <null>, VY: <null> }
    72) { IDX: B36, IDY: B36, VX: <null>, VY: <null> }
    73) { IDX: B36, IDY: B37, VX: <null>, VY: <null> }
    74) { IDX: B37, IDY: B6, VX: <null>, VY: <null> }
    75) { IDX: B37, IDY: B7, VX: <null>, VY: <null> }
    76) { IDX: B37, IDY: B16, VX: <null>, VY: <null> }
    77) { IDX: B37, IDY: B17, VX: <null>, VY: <null> }
    78) { IDX: B37, IDY: B36, VX: <null>, VY: <null> }
    79) { IDX: B37, IDY: B37, VX: <null>, VY: <null> }
    80) { IDX: B38, IDY: B38, VX: 19, VY: 19 }
    81) { IDX: B38, IDY: B39, VX: 19, VY: 19 }
    82) { IDX: B39, IDY: B38, VX: 19, VY: 19 }
    83) { IDX: B39, IDY: B39, VX: 19, VY: 19 }
 8) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: B1, IDY: <null>, VX: 0, VY: -1 }
     2) { IDX: B4, IDY: <null>, VX: 2, VY: -1 }
     3) { IDX: B5, IDY: <null>, VX: 2, VY: -1 }
     4) { IDX: B6, IDY: C0, VX: <null>, VY: <null> }
     5) { IDX: B6, IDY: C1, VX: <null>, VY: <null> }
     6) { IDX: B6, IDY: C2, VX: <null>, VY: <null> }
     7) { IDX: B7, IDY: C0, VX: <null>, VY: <null> }
     8) { IDX: B7, IDY: C1, VX: <null>, VY: <null> }
     9) { IDX: B7, IDY: C2, VX: <null>, VY: <null> }
    10) { IDX: B8, IDY: <null>, VX: 4, VY: -1 }
    11) { IDX: B9, IDY: <null>, VX: 4, VY: -1 }
    12) { IDX: B12, IDY: <null>, VX: 6, VY: -1 }
    13) { IDX: B13, IDY: <null>, VX: 6, VY: -1 }
    14) { IDX: B14, IDY: <null>, VX: 7, VY: -1 }
    15) { IDX: B15, IDY: <null>, VX: 7, VY: -1 }
    16) { IDX: B16, IDY: C0, VX: <null>, VY: <null> }
    17) { IDX: B16, IDY: C1, VX: <null>, VY: <null> }
    18) { IDX: B16, IDY: C2, VX: <null>, VY: <null> }
    19) { IDX: B17, IDY: C0, VX: <null>, VY: <null> }
    20) { IDX: B17, IDY: C1, VX: <null>, VY: <null> }
    21) { IDX: B17, IDY: C2, VX: <null>, VY: <null> }
    22) { IDX: B20, IDY: <null>, VX: 10, VY: -1 }
    23) { IDX: B21, IDY: <null>, VX: 10, VY: -1 }
    24) { IDX: B22, IDY: <null>, VX: 11, VY: -1 }
    25) { IDX: B23, IDY: <null>, VX: 11, VY: -1 }
    26) { IDX: B24, IDY: <null>, VX: 12, VY: -1 }
    27) { IDX: B25, IDY: <null>, VX: 12, VY: -1 }
    28) { IDX: B28, IDY: <null>, VX: 14, VY: -1 }
    29) { IDX: B29, IDY: <null>, VX: 14, VY: -1 }
    30) { IDX: B30, IDY: <null>, VX: 15, VY: -1 }
    31) { IDX: B31, IDY: <null>, VX: 15, VY: -1 }
    32) { IDX: B32, IDY: <null>, VX: 16, VY: -1 }
    33) { IDX: B33, IDY: <null>, VX: 16, VY: -1 }
    34) { IDX: B36, IDY: C0, VX: <null>, VY: <null> }
    35) { IDX: B36, IDY: C1, VX: <null>, VY: <null> }
    36) { IDX: B36, IDY: C2, VX: <null>, VY: <null> }
    37) { IDX: B37, IDY: C0, VX: <null>, VY: <null> }
    38) { IDX: B37, IDY: C1, VX: <null>, VY: <null> }
    39) { IDX: B37, IDY: C2, VX: <null>, VY: <null> }
    40) { IDX: B38, IDY: <null>, VX: 19, VY: -1 }
    41) { IDX: B39, IDY: <null>, VX: 19, VY: -1 }
 9) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: B1, IDY: <null>, VX: 0, VY: -1 }
     2) { IDX: B4, IDY: <null>, VX: 2, VY: -1 }
     3) { IDX: B5, IDY: <null>, VX: 2, VY: -1 }
     4) { IDX: B6, IDY: <null>, VX: <null>, VY: -1 }
     5) { IDX: B7, IDY: <null>, VX: <null>, VY: -1 }
     6) { IDX: B8, IDY: <null>, VX: 4, VY: -1 }
     7) { IDX: B9, IDY: <null>, VX: 4, VY: -1 }
     8) { IDX: B12, IDY: <null>, VX: 6, VY: -1 }
     9) { IDX: B13, IDY: <null>, VX: 6, VY: -1 }
    10) { IDX: B14, IDY: <null>, VX: 7, VY: -1 }
    11) { IDX: B15, IDY: <null>, VX: 7, VY: -1 }
    12) { IDX: B16, IDY: <null>, VX: <null>, VY: -1 }
    13) { IDX: B17, IDY: <null>, VX: <null>, VY: -1 }
    14) { IDX: B20, IDY: <null>, VX: 10, VY: -1 }
    15) { IDX: B21, IDY: <null>, VX: 10, VY: -1 }
    16) { IDX: B22, IDY: D0, VX: 11, VY: 11 }
    17) { IDX: B23, IDY: D0, VX: 11, VY: 11 }
    18) { IDX: B24, IDY: D1, VX: 12, VY: 12 }
    19) { IDX: B25, IDY: D1, VX: 12, VY: 12 }
    20) { IDX: B28, IDY: <null>, VX: 14, VY: -1 }
    21) { IDX: B29, IDY: <null>, VX: 14, VY: -1 }
    22) { IDX: B30, IDY: <null>, VX: 15, VY: -1 }
    23) { IDX: B31, IDY: <null>, VX: 15, VY: -1 }
    24) { IDX: B32, IDY: <null>, VX: 16, VY: -1 }
    25) { IDX: B33, IDY: <null>, VX: 16, VY: -1 }
    26) { IDX: B36, IDY: <null>, VX: <null>, VY: -1 }
    27) { IDX: B37, IDY: <null>, VX: <null>, VY: -1 }
    28) { IDX: B38, IDY: <null>, VX: 19, VY: -1 }
    29) { IDX: B39, IDY: <null>, VX: 19, VY: -1 }
    30) { IDX: <null>, IDY: D2, VX: -1, VY: 13 }
10) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: B1, IDY: <null>, VX: 0, VY: -1 }
     2) { IDX: B4, IDY: <null>, VX: 2, VY: -1 }
     3) { IDX: B5, IDY: <null>, VX: 2, VY: -1 }
     4) { IDX: B6, IDY: <null>, VX: <null>, VY: -1 }
     5) { IDX: B7, IDY: <null>, VX: <null>, VY: -1 }
     6) { IDX: B8, IDY: <null>, VX: 4, VY: -1 }
     7) { IDX: B9, IDY: <null>, VX: 4, VY: -1 }
     8) { IDX: B12, IDY: <null>, VX: 6, VY: -1 }
     9) { IDX: B13, IDY: <null>, VX: 6, VY: -1 }
    10) { IDX: B14, IDY: <null>, VX: 7, VY: -1 }
    11) { IDX: B15, IDY: <null>, VX: 7, VY: -1 }
    12) { IDX: B16, IDY: <null>, VX: <null>, VY: -1 }
    13) { IDX: B17, IDY: <null>, VX: <null>, VY: -1 }
    14) { IDX: B20, IDY: <null>, VX: 10, VY: -1 }
    15) { IDX: B21, IDY: <null>, VX: 10, VY: -1 }
    16) { IDX: B22, IDY: <null>, VX: 11, VY: -1 }
    17) { IDX: B23, IDY: <null>, VX: 11, VY: -1 }
    18) { IDX: B24, IDY: <null>, VX: 12, VY: -1 }
    19) { IDX: B25, IDY: <null>, VX: 12, VY: -1 }
    20) { IDX: B28, IDY: <null>, VX: 14, VY: -1 }
    21) { IDX: B29, IDY: <null>, VX: 14, VY: -1 }
    22) { IDX: B30, IDY: <null>, VX: 15, VY: -1 }
    23) { IDX: B31, IDY: <null>, VX: 15, VY: -1 }
    24) { IDX: B32, IDY: <null>, VX: 16, VY: -1 }
    25) { IDX: B33, IDY: <null>, VX: 16, VY: -1 }
    26) { IDX: B36, IDY: <null>, VX: <null>, VY: -1 }
    27) { IDX: B37, IDY: <null>, VX: <null>, VY: -1 }
    28) { IDX: B38, IDY: <null>, VX: 19, VY: -1 }
    29) { IDX: B39, IDY: <null>, VX: 19, VY: -1 }
11) <null>
12) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: A3, VX: <null>, VY: <null> }
     1) { IDX: C0, IDY: A10, VX: <null>, VY: <null> }
     2) { IDX: C1, IDY: A3, VX: <null>, VY: <null> }
     3) { IDX: C1, IDY: A10, VX: <null>, VY: <null> }
     4) { IDX: C2, IDY: A3, VX: <null>, VY: <null> }
     5) { IDX: C2, IDY: A10, VX: <null>, VY: <null> }
     6) { IDX: <null>, IDY: A0, VX: -1, VY: 0 }
     7) { IDX: <null>, IDY: A1, VX: -1, VY: 1 }
     8) { IDX: <null>, IDY: A4, VX: -1, VY: 4 }
     9) { IDX: <null>, IDY: A6, VX: -1, VY: 6 }
    10) { IDX: <null>, IDY: A7, VX: -1, VY: 7 }
    11) { IDX: <null>, IDY: A9, VX: -1, VY: 9 }
    12) { IDX: <null>, IDY: A12, VX: -1, VY: 12 }
    13) { IDX: <null>, IDY: A13, VX: -1, VY: 13 }
    14) { IDX: <null>, IDY: A15, VX: -1, VY: 15 }
    15) { IDX: <null>, IDY: A16, VX: -1, VY: 16 }
    16) { IDX: <null>, IDY: A18, VX: -1, VY: 18 }
    17) { IDX: <null>, IDY: A19, VX: -1, VY: 19 }
13) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: B6, VX: <null>, VY: <null> }
     1) { IDX: C0, IDY: B7, VX: <null>, VY: <null> }
     2) { IDX: C0, IDY: B16, VX: <null>, VY: <null> }
     3) { IDX: C0, IDY: B17, VX: <null>, VY: <null> }
     4) { IDX: C0, IDY: B36, VX: <null>, VY: <null> }
     5) { IDX: C0, IDY: B37, VX: <null>, VY: <null> }
     6) { IDX: C1, IDY: B6, VX: <null>, VY: <null> }
     7) { IDX: C1, IDY: B7, VX: <null>, VY: <null> }
     8) { IDX: C1, IDY: B16, VX: <null>, VY: <null> }
     9) { IDX: C1, IDY: B17, VX: <null>, VY: <null> }
    10) { IDX: C1, IDY: B36, VX: <null>, VY: <null> }
    11) { IDX: C1, IDY: B37, VX: <null>, VY: <null> }
    12) { IDX: C2, IDY: B6, VX: <null>, VY: <null> }
    13) { IDX: C2, IDY: B7, VX: <null>, VY: <null> }
    14) { IDX: C2, IDY: B16, VX: <null>, VY: <null> }
    15) { IDX: C2, IDY: B17, VX: <null>, VY: <null> }
    16) { IDX: C2, IDY: B36, VX: <null>, VY: <null> }
    17) { IDX: C2, IDY: B37, VX: <null>, VY: <null> }
    18) { IDX: <null>, IDY: B0, VX: -1, VY: 0 }
    19) { IDX: <null>, IDY: B1, VX: -1, VY: 0 }
    20) { IDX: <null>, IDY: B4, VX: -1, VY: 2 }
    21) { IDX: <null>, IDY: B5, VX: -1, VY: 2 }
    22) { IDX: <null>, IDY: B8, VX: -1, VY: 4 }
    23) { IDX: <null>, IDY: B9, VX: -1, VY: 4 }
    24) { IDX: <null>, IDY: B12, VX: -1, VY: 6 }
    25) { IDX: <null>, IDY: B13, VX: -1, VY: 6 }
    26) { IDX: <null>, IDY: B14, VX: -1, VY: 7 }
    27) { IDX: <null>, IDY: B15, VX: -1, VY: 7 }
    28) { IDX: <null>, IDY: B20, VX: -1, VY: 10 }
    29) { IDX: <null>, IDY: B21, VX: -1, VY: 10 }
    30) { IDX: <null>, IDY: B22, VX: -1, VY: 11 }
    31) { IDX: <null>, IDY: B23, VX: -1, VY: 11 }
    32) { IDX: <null>, IDY: B24, VX: -1, VY: 12 }
    33) { IDX: <null>, IDY: B25, VX: -1, VY: 12 }
    34) { IDX: <null>, IDY: B28, VX: -1, VY: 14 }
    35) { IDX: <null>, IDY: B29, VX: -1, VY: 14 }
    36) { IDX: <null>, IDY: B30, VX: -1, VY: 15 }
    37) { IDX: <null>, IDY: B31, VX: -1, VY: 15 }
    38) { IDX: <null>, IDY: B32, VX: -1, VY: 16 }
    39) { IDX: <null>, IDY: B33, VX: -1, VY: 16 }
    40) { IDX: <null>, IDY: B38, VX: -1, VY: 19 }
    41) { IDX: <null>, IDY: B39, VX: -1, VY: 19 }
14) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: C0, VX: <null>, VY: <null> }
     1) { IDX: C0, IDY: C1, VX: <null>, VY: <null> }
     2) { IDX: C0, IDY: C2, VX: <null>, VY: <null> }
     3) { IDX: C1, IDY: C0, VX: <null>, VY: <null> }
     4) { IDX: C1, IDY: C1, VX: <null>, VY: <null> }
     5) { IDX: C1, IDY: C2, VX: <null>, VY: <null> }
     6) { IDX: C2, IDY: C0, VX: <null>, VY: <null> }
     7) { IDX: C2, IDY: C1, VX: <null>, VY: <null> }
     8) { IDX: C2, IDY: C2, VX: <null>, VY: <null> }
15) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: <null>, VX: <null>, VY: -1 }
     1) { IDX: C1, IDY: <null>, VX: <null>, VY: -1 }
     2) { IDX: C2, IDY: <null>, VX: <null>, VY: -1 }
     3) { IDX: <null>, IDY: D0, VX: -1, VY: 11 }
     4) { IDX: <null>, IDY: D1, VX: -1, VY: 12 }
     5) { IDX: <null>, IDY: D2, VX: -1, VY: 13 }
16) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: <null>, VX: <null>, VY: -1 }
     1) { IDX: C1, IDY: <null>, VX: <null>, VY: -1 }
     2) { IDX: C2, IDY: <null>, VX: <null>, VY: -1 }
17) <null>
18) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: <null>, VX: 11, VY: -1 }
     1) { IDX: D1, IDY: A12, VX: 12, VY: 12 }
     2) { IDX: D2, IDY: A13, VX: 13, VY: 13 }
     3) { IDX: <null>, IDY: A0, VX: -1, VY: 0 }
     4) { IDX: <null>, IDY: A1, VX: -1, VY: 1 }
     5) { IDX: <null>, IDY: A3, VX: -1, VY: <null> }
     6) { IDX: <null>, IDY: A4, VX: -1, VY: 4 }
     7) { IDX: <null>, IDY: A6, VX: -1, VY: 6 }
     8) { IDX: <null>, IDY: A7, VX: -1, VY: 7 }
     9) { IDX: <null>, IDY: A9, VX: -1, VY: 9 }
    10) { IDX: <null>, IDY: A10, VX: -1, VY: <null> }
    11) { IDX: <null>, IDY: A15, VX: -1, VY: 15 }
    12) { IDX: <null>, IDY: A16, VX: -1, VY: 16 }
    13) { IDX: <null>, IDY: A18, VX: -1, VY: 18 }
    14) { IDX: <null>, IDY: A19, VX: -1, VY: 19 }
19) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: B22, VX: 11, VY: 11 }
     1) { IDX: D0, IDY: B23, VX: 11, VY: 11 }
     2) { IDX: D1, IDY: B24, VX: 12, VY: 12 }
     3) { IDX: D1, IDY: B25, VX: 12, VY: 12 }
     4) { IDX: D2, IDY: <null>, VX: 13, VY: -1 }
     5) { IDX: <null>, IDY: B0, VX: -1, VY: 0 }
     6) { IDX: <null>, IDY: B1, VX: -1, VY: 0 }
     7) { IDX: <null>, IDY: B4, VX: -1, VY: 2 }
     8) { IDX: <null>, IDY: B5, VX: -1, VY: 2 }
     9) { IDX: <null>, IDY: B6, VX: -1, VY: <null> }
    10) { IDX: <null>, IDY: B7, VX: -1, VY: <null> }
    11) { IDX: <null>, IDY: B8, VX: -1, VY: 4 }
    12) { IDX: <null>, IDY: B9, VX: -1, VY: 4 }
    13) { IDX: <null>, IDY: B12, VX: -1, VY: 6 }
    14) { IDX: <null>, IDY: B13, VX: -1, VY: 6 }
    15) { IDX: <null>, IDY: B14, VX: -1, VY: 7 }
    16) { IDX: <null>, IDY: B15, VX: -1, VY: 7 }
    17) { IDX: <null>, IDY: B16, VX: -1, VY: <null> }
    18) { IDX: <null>, IDY: B17, VX: -1, VY: <null> }
    19) { IDX: <null>, IDY: B20, VX: -1, VY: 10 }
    20) { IDX: <null>, IDY: B21, VX: -1, VY: 10 }
    21) { IDX: <null>, IDY: B28, VX: -1, VY: 14 }
    22) { IDX: <null>, IDY: B29, VX: -1, VY: 14 }
    23) { IDX: <null>, IDY: B30, VX: -1, VY: 15 }
    24) { IDX: <null>, IDY: B31, VX: -1, VY: 15 }
    25) { IDX: <null>, IDY: B32, VX: -1, VY: 16 }
    26) { IDX: <null>, IDY: B33, VX: -1, VY: 16 }
    27) { IDX: <null>, IDY: B36, VX: -1, VY: <null> }
    28) { IDX: <null>, IDY: B37, VX: -1, VY: <null> }
    29) { IDX: <null>, IDY: B38, VX: -1, VY: 19 }
    30) { IDX: <null>, IDY: B39, VX: -1, VY: 19 }
20) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: <null>, VX: 11, VY: -1 }
     1) { IDX: D1, IDY: <null>, VX: 12, VY: -1 }
     2) { IDX: D2, IDY: <null>, VX: 13, VY: -1 }
     3) { IDX: <null>, IDY: C0, VX: -1, VY: <null> }
     4) { IDX: <null>, IDY: C1, VX: -1, VY: <null> }
     5) { IDX: <null>, IDY: C2, VX: -1, VY: <null> }
21) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: D0, VX: 11, VY: 11 }
     1) { IDX: D1, IDY: D1, VX: 12, VY: 12 }
     2) { IDX: D2, IDY: D2, VX: 13, VY: 13 }
22) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: <null>, VX: 11, VY: -1 }
     1) { IDX: D1, IDY: <null>, VX: 12, VY: -1 }
     2) { IDX: D2, IDY: <null>, VX: 13, VY: -1 }
23) <null>
24) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: <null>, IDY: A0, VX: -1, VY: 0 }
     1) { IDX: <null>, IDY: A1, VX: -1, VY: 1 }
     2) { IDX: <null>, IDY: A3, VX: -1, VY: <null> }
     3) { IDX: <null>, IDY: A4, VX: -1, VY: 4 }
     4) { IDX: <null>, IDY: A6, VX: -1, VY: 6 }
     5) { IDX: <null>, IDY: A7, VX: -1, VY: 7 }
     6) { IDX: <null>, IDY: A9, VX: -1, VY: 9 }
     7) { IDX: <null>, IDY: A10, VX: -1, VY: <null> }
     8) { IDX: <null>, IDY: A12, VX: -1, VY: 12 }
     9) { IDX: <null>, IDY: A13, VX: -1, VY: 13 }
    10) { IDX: <null>, IDY: A15, VX: -1, VY: 15 }
    11) { IDX: <null>, IDY: A16, VX: -1, VY: 16 }
    12) { IDX: <null>, IDY: A18, VX: -1, VY: 18 }
    13) { IDX: <null>, IDY: A19, VX: -1, VY: 19 }
25) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: <null>, IDY: B0, VX: -1, VY: 0 }
     1) { IDX: <null>, IDY: B1, VX: -1, VY: 0 }
     2) { IDX: <null>, IDY: B4, VX: -1, VY: 2 }
     3) { IDX: <null>, IDY: B5, VX: -1, VY: 2 }
     4) { IDX: <null>, IDY: B6, VX: -1, VY: <null> }
     5) { IDX: <null>, IDY: B7, VX: -1, VY: <null> }
     6) { IDX: <null>, IDY: B8, VX: -1, VY: 4 }
     7) { IDX: <null>, IDY: B9, VX: -1, VY: 4 }
     8) { IDX: <null>, IDY: B12, VX: -1, VY: 6 }
     9) { IDX: <null>, IDY: B13, VX: -1, VY: 6 }
    10) { IDX: <null>, IDY: B14, VX: -1, VY: 7 }
    11) { IDX: <null>, IDY: B15, VX: -1, VY: 7 }
    12) { IDX: <null>, IDY: B16, VX: -1, VY: <null> }
    13) { IDX: <null>, IDY: B17, VX: -1, VY: <null> }
    14) { IDX: <null>, IDY: B20, VX: -1, VY: 10 }
    15) { IDX: <null>, IDY: B21, VX: -1, VY: 10 }
    16) { IDX: <null>, IDY: B22, VX: -1, VY: 11 }
    17) { IDX: <null>, IDY: B23, VX: -1, VY: 11 }
    18) { IDX: <null>, IDY: B24, VX: -1, VY: 12 }
    19) { IDX: <null>, IDY: B25, VX: -1, VY: 12 }
    20) { IDX: <null>, IDY: B28, VX: -1, VY: 14 }
    21) { IDX: <null>, IDY: B29, VX: -1, VY: 14 }
    22) { IDX: <null>, IDY: B30, VX: -1, VY: 15 }
    23) { IDX: <null>, IDY: B31, VX: -1, VY: 15 }
    24) { IDX: <null>, IDY: B32, VX: -1, VY: 16 }
    25) { IDX: <null>, IDY: B33, VX: -1, VY: 16 }
    26) { IDX: <null>, IDY: B36, VX: -1, VY: <null> }
    27) { IDX: <null>, IDY: B37, VX: -1, VY: <null> }
    28) { IDX: <null>, IDY: B38, VX: -1, VY: 19 }
    29) { IDX: <null>, IDY: B39, VX: -1, VY: 19 }
26) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: <null>, IDY: C0, VX: -1, VY: <null> }
     1) { IDX: <null>, IDY: C1, VX: -1, VY: <null> }
     2) { IDX: <null>, IDY: C2, VX: -1, VY: <null> }
27) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: <null>, IDY: D0, VX: -1, VY: 11 }
     1) { IDX: <null>, IDY: D1, VX: -1, VY: 12 }
     2) { IDX: <null>, IDY: D2, VX: -1, VY: 13 }
28) Sequence: Seq<{str,str,i8,i8}>
29) <null>
30) <null>
31) <null>
32) <null>
33) <null>
34) <null>
35) <null>
*** Ctx ping count: 3074
    [0:2](3025=275+2750): CrossJoin(*3: *1x, *4: *2x, Test.Wrap(*3.V @= *4.V), {IDX:*3.ID, IDY:*4.ID, VX:*3.V, VY:*4.V}, {IDX:*3.ID, VX:*3.V, VY:Opt<i8?>(-1)[, IDY:str(<null>)]}, {IDY:*4.ID, VX:Opt<i8?>(-1), VY:*4.V[, IDX:str(<null>)]})
    [2:4](49=7+42): CrossJoin(*1: XS, *2: YS, true, CrossJoin(*3: *1, *4: *2, Test.Wrap(*3.V @= *4.V), {IDX:*3.ID, IDY:*4.ID, VX:*3.V, VY:*4.V}, {IDX:*3.ID, VX:*3.V, VY:Opt<i8?>(-1)[, IDY:str(<null>)]}, {IDY:*4.ID, VX:Opt<i8?>(-1), VY:*4.V[, IDX:str(<null>)]}))
###
> CrossJoin(X:XS, Y:YS, true, CrossJoin(x:X, y:Y,      x.V  = y.V , { IDX:x.ID, IDY:y.ID, VX:x.V, VY:y.V }, { IDX:ID, VX:V, VY:-1 }, { IDY:ID, VX:-1, VY:V }))
CrossJoin(X : XS, Y : YS, true, CrossJoin(x : X, y : Y, x.V @= y.V, { IDX : x.ID, IDY : y.ID, VX : x.V, VY : y.V }, { IDX : ID, VX : V, VY : -1 }, { IDY : ID, VX : -1, VY : V })) : {IDX:s, IDY:s, VX:i8?, VY:i8?}**
BndKind:Call, Type:{IDX:s, IDY:s, VX:i8?, VY:i8?}**, Bnd:(Call(∂.CrossJoin([map:1] Global(XS), [map:2] Global(YS), true:b, Call(∂.KeyJoin([map:3] Scope(1), [map:4] Scope(2), [=] GetField(Scope(3), V), GetField(Scope(4), V), {IDX:GetField(Scope(3), ID), IDY:GetField(Scope(4), ID), VX:GetField(Scope(3), V), VY:GetField(Scope(4), V)}, {IDX:GetField(Scope(3), ID), VX:GetField(Scope(3), V), VY:Opt<i8?>(-1:i8)[, IDY:str(<null>)]}, {IDY:GetField(Scope(4), ID), VX:Opt<i8?>(-1:i8), VY:GetField(Scope(4), V)[, IDX:str(<null>)]})))))
// (<ctx>, ∂.XS:{ID:s, V:i8?}**, ∂.YS:{ID:s, V:i8?}**) : {IDX:s, IDY:s, VX:i8?, VY:i8?}**
CrossJoin_2(Arr<obj>, Seq<{str,i8}>, Seq<{str,i8}>):bool
      1) ldc.i4.1
      1) ret
  Total Size: 2

KeyJoin_2(Arr<obj>, {str,i8}):Opt<i8>
      1) ldarg.1 [{str,i8}]
      1) dup
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      5) ldfld {str,i8}::_F1:i8
      5) newobj Opt<i8>(i8)
      5) br [1]
  Label [0]:
      1) pop
      5) call static CodeGenUtil::GetDefault():Opt<i8>
  Label [1]:
      1) ret
  Total Size: 36

KeyJoin_3(Arr<obj>, {str,i8}):Opt<i8>
      1) ldarg.1 [{str,i8}]
      1) dup
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      5) ldfld {str,i8}::_F1:i8
      5) newobj Opt<i8>(i8)
      5) br [1]
  Label [0]:
      1) pop
      5) call static CodeGenUtil::GetDefault():Opt<i8>
  Label [1]:
      1) ret
  Total Size: 36

KeyJoin_4(Arr<obj>, {str,i8}, {str,i8}):{str,str,i8,i8}
      5) newobj {str,str,i8,i8}()
      1) dup
      1) ldc.i4.3
      5) stfld {str,str,i8,i8}::_B0:u1
      1) stloc.0 [{str,str,i8,i8}]
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F0:str
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F1:str
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.4
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F1:i8
      5) stfld {str,str,i8,i8}::_F2:i8
  Label [0]:
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [1]
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.8
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F1:i8
      5) stfld {str,str,i8,i8}::_F3:i8
  Label [1]:
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 130

KeyJoin_5(Arr<obj>, {str,i8}):{str,str,i8,i8}
      5) newobj {str,str,i8,i8}()
      1) dup
      1) ldc.i4.3
      5) stfld {str,str,i8,i8}::_B0:u1
      1) stloc.0 [{str,str,i8,i8}]
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F0:str
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.4
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F1:i8
      5) stfld {str,str,i8,i8}::_F2:i8
  Label [0]:
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldc.i4.m1
      1) conv.i8
      5) stfld {str,str,i8,i8}::_F3:i8
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.8
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 101

KeyJoin_6(Arr<obj>, {str,i8}):{str,str,i8,i8}
      5) newobj {str,str,i8,i8}()
      1) dup
      1) ldc.i4.3
      5) stfld {str,str,i8,i8}::_B0:u1
      1) stloc.0 [{str,str,i8,i8}]
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F1:str
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldc.i4.m1
      1) conv.i8
      5) stfld {str,str,i8,i8}::_F2:i8
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.4
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.8
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F1:i8
      5) stfld {str,str,i8,i8}::_F3:i8
  Label [0]:
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 101

CrossJoin_3(Arr<obj>, Seq<{str,i8}>, Seq<{str,i8}>):Seq<{str,str,i8,i8}>
      1) ldarg.1 [Seq<{str,i8}>]
      1) ldarg.2 [Seq<{str,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<{str,i8},Opt<i8>>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [Func<{str,i8},Opt<i8>>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Func<{str,i8},{str,i8},{str,str,i8,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.3
      5) ldelem [Func<{str,i8},{str,str,i8,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.4
      5) ldelem [Func<{str,i8},{str,str,i8,i8}>]
      1) ldnull
      1) ldc.i4.0
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [ExecCtx]
      1) ldc.i4.0
      5) call static KeyJoinGen::Exec(Seq<{str,i8}>, Seq<{str,i8}>, Func<{str,i8},Opt<i8>>, Func<{str,i8},Opt<i8>>, Func<{str,i8},{str,i8},{str,str,i8,i8}>, Func<{str,i8},{str,str,i8,i8}>, Func<{str,i8},{str,str,i8,i8}>, EqualityComparer<Opt<i8>>, bool, ExecCtx, i4):Seq<{str,str,i8,i8}>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<{str,str,i8,i8}>):Seq<{str,str,i8,i8}>
      1) ret
  Total Size: 88

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):ExecCtx
      1) stloc.0 [ExecCtx]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<Seq<{str,i8}>>
      1) stloc.1 [Seq<Seq<{str,i8}>>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.2
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<Seq<{str,i8}>>
      1) stloc.2 [Seq<Seq<{str,i8}>>]
      1) ldloc.1 [Seq<Seq<{str,i8}>>]
      1) ldloc.2 [Seq<Seq<{str,i8}>>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<Seq<{str,i8}>,Seq<{str,i8}>,bool>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [MethodInfo]
      5) ldtoken [Func<Seq<{str,i8}>,Seq<{str,i8}>,Seq<{str,str,i8,i8}>>]
      5) call static Type::GetTypeFromHandle(RuntimeTypeHandle):Type
      1) ldc.i4.2
      5) newarr [obj]
      1) dup
      1) ldc.i4.0
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Arr<obj>]
      5) stelem [Arr<obj>]
      1) dup
      1) ldc.i4.1
      1) ldloc.0 [ExecCtx]
      5) stelem [ExecCtx]
      5) callvirt DynamicMethod::CreateDelegate(Type, obj):Delegate
      1) ldloc.0 [ExecCtx]
      1) ldc.i4.3
      5) call static CrossJoinGen::Exec(Seq<Seq<{str,i8}>>, Seq<Seq<{str,i8}>>, Func<Seq<{str,i8}>,Seq<{str,i8}>,bool>, Func<Seq<{str,i8}>,Seq<{str,i8}>,Seq<{str,str,i8,i8}>>, ExecCtx, i4):Seq<Seq<{str,str,i8,i8}>>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<Seq<{str,str,i8,i8}>>):Seq<Seq<{str,str,i8,i8}>>
      1) ret
  Total Size: 99

Func sig: (<ctx>:x, XS:{ID:s, V:i8?}**, YS:{ID:s, V:i8?}**) to {IDX:s, IDY:s, VX:i8?, VY:i8?}**
Sequence: Seq<Seq<{str,str,i8,i8}>>
 0) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: A0, VX: 0, VY: 0 }
     1) { IDX: A1, IDY: A1, VX: 1, VY: 1 }
     2) { IDX: A3, IDY: A3, VX: <null>, VY: <null> }
     3) { IDX: A3, IDY: A10, VX: <null>, VY: <null> }
     4) { IDX: A4, IDY: A4, VX: 4, VY: 4 }
     5) { IDX: A6, IDY: A6, VX: 6, VY: 6 }
     6) { IDX: A7, IDY: A7, VX: 7, VY: 7 }
     7) { IDX: A9, IDY: A9, VX: 9, VY: 9 }
     8) { IDX: A10, IDY: A3, VX: <null>, VY: <null> }
     9) { IDX: A10, IDY: A10, VX: <null>, VY: <null> }
    10) { IDX: A12, IDY: A12, VX: 12, VY: 12 }
    11) { IDX: A13, IDY: A13, VX: 13, VY: 13 }
    12) { IDX: A15, IDY: A15, VX: 15, VY: 15 }
    13) { IDX: A16, IDY: A16, VX: 16, VY: 16 }
    14) { IDX: A18, IDY: A18, VX: 18, VY: 18 }
    15) { IDX: A19, IDY: A19, VX: 19, VY: 19 }
 1) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: B0, VX: 0, VY: 0 }
     1) { IDX: A0, IDY: B1, VX: 0, VY: 0 }
     2) { IDX: A1, IDY: <null>, VX: 1, VY: -1 }
     3) { IDX: A3, IDY: B6, VX: <null>, VY: <null> }
     4) { IDX: A3, IDY: B7, VX: <null>, VY: <null> }
     5) { IDX: A3, IDY: B16, VX: <null>, VY: <null> }
     6) { IDX: A3, IDY: B17, VX: <null>, VY: <null> }
     7) { IDX: A3, IDY: B36, VX: <null>, VY: <null> }
     8) { IDX: A3, IDY: B37, VX: <null>, VY: <null> }
     9) { IDX: A4, IDY: B8, VX: 4, VY: 4 }
    10) { IDX: A4, IDY: B9, VX: 4, VY: 4 }
    11) { IDX: A6, IDY: B12, VX: 6, VY: 6 }
    12) { IDX: A6, IDY: B13, VX: 6, VY: 6 }
    13) { IDX: A7, IDY: B14, VX: 7, VY: 7 }
    14) { IDX: A7, IDY: B15, VX: 7, VY: 7 }
    15) { IDX: A9, IDY: <null>, VX: 9, VY: -1 }
    16) { IDX: A10, IDY: B6, VX: <null>, VY: <null> }
    17) { IDX: A10, IDY: B7, VX: <null>, VY: <null> }
    18) { IDX: A10, IDY: B16, VX: <null>, VY: <null> }
    19) { IDX: A10, IDY: B17, VX: <null>, VY: <null> }
    20) { IDX: A10, IDY: B36, VX: <null>, VY: <null> }
    21) { IDX: A10, IDY: B37, VX: <null>, VY: <null> }
    22) { IDX: A12, IDY: B24, VX: 12, VY: 12 }
    23) { IDX: A12, IDY: B25, VX: 12, VY: 12 }
    24) { IDX: A13, IDY: <null>, VX: 13, VY: -1 }
    25) { IDX: A15, IDY: B30, VX: 15, VY: 15 }
    26) { IDX: A15, IDY: B31, VX: 15, VY: 15 }
    27) { IDX: A16, IDY: B32, VX: 16, VY: 16 }
    28) { IDX: A16, IDY: B33, VX: 16, VY: 16 }
    29) { IDX: A18, IDY: <null>, VX: 18, VY: -1 }
    30) { IDX: A19, IDY: B38, VX: 19, VY: 19 }
    31) { IDX: A19, IDY: B39, VX: 19, VY: 19 }
    32) { IDX: <null>, IDY: B4, VX: -1, VY: 2 }
    33) { IDX: <null>, IDY: B5, VX: -1, VY: 2 }
    34) { IDX: <null>, IDY: B20, VX: -1, VY: 10 }
    35) { IDX: <null>, IDY: B21, VX: -1, VY: 10 }
    36) { IDX: <null>, IDY: B22, VX: -1, VY: 11 }
    37) { IDX: <null>, IDY: B23, VX: -1, VY: 11 }
    38) { IDX: <null>, IDY: B28, VX: -1, VY: 14 }
    39) { IDX: <null>, IDY: B29, VX: -1, VY: 14 }
 2) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: A1, IDY: <null>, VX: 1, VY: -1 }
     2) { IDX: A3, IDY: C0, VX: <null>, VY: <null> }
     3) { IDX: A3, IDY: C1, VX: <null>, VY: <null> }
     4) { IDX: A3, IDY: C2, VX: <null>, VY: <null> }
     5) { IDX: A4, IDY: <null>, VX: 4, VY: -1 }
     6) { IDX: A6, IDY: <null>, VX: 6, VY: -1 }
     7) { IDX: A7, IDY: <null>, VX: 7, VY: -1 }
     8) { IDX: A9, IDY: <null>, VX: 9, VY: -1 }
     9) { IDX: A10, IDY: C0, VX: <null>, VY: <null> }
    10) { IDX: A10, IDY: C1, VX: <null>, VY: <null> }
    11) { IDX: A10, IDY: C2, VX: <null>, VY: <null> }
    12) { IDX: A12, IDY: <null>, VX: 12, VY: -1 }
    13) { IDX: A13, IDY: <null>, VX: 13, VY: -1 }
    14) { IDX: A15, IDY: <null>, VX: 15, VY: -1 }
    15) { IDX: A16, IDY: <null>, VX: 16, VY: -1 }
    16) { IDX: A18, IDY: <null>, VX: 18, VY: -1 }
    17) { IDX: A19, IDY: <null>, VX: 19, VY: -1 }
 3) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: A1, IDY: <null>, VX: 1, VY: -1 }
     2) { IDX: A3, IDY: <null>, VX: <null>, VY: -1 }
     3) { IDX: A4, IDY: <null>, VX: 4, VY: -1 }
     4) { IDX: A6, IDY: <null>, VX: 6, VY: -1 }
     5) { IDX: A7, IDY: <null>, VX: 7, VY: -1 }
     6) { IDX: A9, IDY: <null>, VX: 9, VY: -1 }
     7) { IDX: A10, IDY: <null>, VX: <null>, VY: -1 }
     8) { IDX: A12, IDY: D1, VX: 12, VY: 12 }
     9) { IDX: A13, IDY: D2, VX: 13, VY: 13 }
    10) { IDX: A15, IDY: <null>, VX: 15, VY: -1 }
    11) { IDX: A16, IDY: <null>, VX: 16, VY: -1 }
    12) { IDX: A18, IDY: <null>, VX: 18, VY: -1 }
    13) { IDX: A19, IDY: <null>, VX: 19, VY: -1 }
    14) { IDX: <null>, IDY: D0, VX: -1, VY: 11 }
 4) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: A1, IDY: <null>, VX: 1, VY: -1 }
     2) { IDX: A3, IDY: <null>, VX: <null>, VY: -1 }
     3) { IDX: A4, IDY: <null>, VX: 4, VY: -1 }
     4) { IDX: A6, IDY: <null>, VX: 6, VY: -1 }
     5) { IDX: A7, IDY: <null>, VX: 7, VY: -1 }
     6) { IDX: A9, IDY: <null>, VX: 9, VY: -1 }
     7) { IDX: A10, IDY: <null>, VX: <null>, VY: -1 }
     8) { IDX: A12, IDY: <null>, VX: 12, VY: -1 }
     9) { IDX: A13, IDY: <null>, VX: 13, VY: -1 }
    10) { IDX: A15, IDY: <null>, VX: 15, VY: -1 }
    11) { IDX: A16, IDY: <null>, VX: 16, VY: -1 }
    12) { IDX: A18, IDY: <null>, VX: 18, VY: -1 }
    13) { IDX: A19, IDY: <null>, VX: 19, VY: -1 }
 5) <null>
 6) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: A0, VX: 0, VY: 0 }
     1) { IDX: B1, IDY: A0, VX: 0, VY: 0 }
     2) { IDX: B4, IDY: <null>, VX: 2, VY: -1 }
     3) { IDX: B5, IDY: <null>, VX: 2, VY: -1 }
     4) { IDX: B6, IDY: A3, VX: <null>, VY: <null> }
     5) { IDX: B6, IDY: A10, VX: <null>, VY: <null> }
     6) { IDX: B7, IDY: A3, VX: <null>, VY: <null> }
     7) { IDX: B7, IDY: A10, VX: <null>, VY: <null> }
     8) { IDX: B8, IDY: A4, VX: 4, VY: 4 }
     9) { IDX: B9, IDY: A4, VX: 4, VY: 4 }
    10) { IDX: B12, IDY: A6, VX: 6, VY: 6 }
    11) { IDX: B13, IDY: A6, VX: 6, VY: 6 }
    12) { IDX: B14, IDY: A7, VX: 7, VY: 7 }
    13) { IDX: B15, IDY: A7, VX: 7, VY: 7 }
    14) { IDX: B16, IDY: A3, VX: <null>, VY: <null> }
    15) { IDX: B16, IDY: A10, VX: <null>, VY: <null> }
    16) { IDX: B17, IDY: A3, VX: <null>, VY: <null> }
    17) { IDX: B17, IDY: A10, VX: <null>, VY: <null> }
    18) { IDX: B20, IDY: <null>, VX: 10, VY: -1 }
    19) { IDX: B21, IDY: <null>, VX: 10, VY: -1 }
    20) { IDX: B22, IDY: <null>, VX: 11, VY: -1 }
    21) { IDX: B23, IDY: <null>, VX: 11, VY: -1 }
    22) { IDX: B24, IDY: A12, VX: 12, VY: 12 }
    23) { IDX: B25, IDY: A12, VX: 12, VY: 12 }
    24) { IDX: B28, IDY: <null>, VX: 14, VY: -1 }
    25) { IDX: B29, IDY: <null>, VX: 14, VY: -1 }
    26) { IDX: B30, IDY: A15, VX: 15, VY: 15 }
    27) { IDX: B31, IDY: A15, VX: 15, VY: 15 }
    28) { IDX: B32, IDY: A16, VX: 16, VY: 16 }
    29) { IDX: B33, IDY: A16, VX: 16, VY: 16 }
    30) { IDX: B36, IDY: A3, VX: <null>, VY: <null> }
    31) { IDX: B36, IDY: A10, VX: <null>, VY: <null> }
    32) { IDX: B37, IDY: A3, VX: <null>, VY: <null> }
    33) { IDX: B37, IDY: A10, VX: <null>, VY: <null> }
    34) { IDX: B38, IDY: A19, VX: 19, VY: 19 }
    35) { IDX: B39, IDY: A19, VX: 19, VY: 19 }
    36) { IDX: <null>, IDY: A1, VX: -1, VY: 1 }
    37) { IDX: <null>, IDY: A9, VX: -1, VY: 9 }
    38) { IDX: <null>, IDY: A13, VX: -1, VY: 13 }
    39) { IDX: <null>, IDY: A18, VX: -1, VY: 18 }
 7) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: B0, VX: 0, VY: 0 }
     1) { IDX: B0, IDY: B1, VX: 0, VY: 0 }
     2) { IDX: B1, IDY: B0, VX: 0, VY: 0 }
     3) { IDX: B1, IDY: B1, VX: 0, VY: 0 }
     4) { IDX: B4, IDY: B4, VX: 2, VY: 2 }
     5) { IDX: B4, IDY: B5, VX: 2, VY: 2 }
     6) { IDX: B5, IDY: B4, VX: 2, VY: 2 }
     7) { IDX: B5, IDY: B5, VX: 2, VY: 2 }
     8) { IDX: B6, IDY: B6, VX: <null>, VY: <null> }
     9) { IDX: B6, IDY: B7, VX: <null>, VY: <null> }
    10) { IDX: B6, IDY: B16, VX: <null>, VY: <null> }
    11) { IDX: B6, IDY: B17, VX: <null>, VY: <null> }
    12) { IDX: B6, IDY: B36, VX: <null>, VY: <null> }
    13) { IDX: B6, IDY: B37, VX: <null>, VY: <null> }
    14) { IDX: B7, IDY: B6, VX: <null>, VY: <null> }
    15) { IDX: B7, IDY: B7, VX: <null>, VY: <null> }
    16) { IDX: B7, IDY: B16, VX: <null>, VY: <null> }
    17) { IDX: B7, IDY: B17, VX: <null>, VY: <null> }
    18) { IDX: B7, IDY: B36, VX: <null>, VY: <null> }
    19) { IDX: B7, IDY: B37, VX: <null>, VY: <null> }
    20) { IDX: B8, IDY: B8, VX: 4, VY: 4 }
    21) { IDX: B8, IDY: B9, VX: 4, VY: 4 }
    22) { IDX: B9, IDY: B8, VX: 4, VY: 4 }
    23) { IDX: B9, IDY: B9, VX: 4, VY: 4 }
    24) { IDX: B12, IDY: B12, VX: 6, VY: 6 }
    25) { IDX: B12, IDY: B13, VX: 6, VY: 6 }
    26) { IDX: B13, IDY: B12, VX: 6, VY: 6 }
    27) { IDX: B13, IDY: B13, VX: 6, VY: 6 }
    28) { IDX: B14, IDY: B14, VX: 7, VY: 7 }
    29) { IDX: B14, IDY: B15, VX: 7, VY: 7 }
    30) { IDX: B15, IDY: B14, VX: 7, VY: 7 }
    31) { IDX: B15, IDY: B15, VX: 7, VY: 7 }
    32) { IDX: B16, IDY: B6, VX: <null>, VY: <null> }
    33) { IDX: B16, IDY: B7, VX: <null>, VY: <null> }
    34) { IDX: B16, IDY: B16, VX: <null>, VY: <null> }
    35) { IDX: B16, IDY: B17, VX: <null>, VY: <null> }
    36) { IDX: B16, IDY: B36, VX: <null>, VY: <null> }
    37) { IDX: B16, IDY: B37, VX: <null>, VY: <null> }
    38) { IDX: B17, IDY: B6, VX: <null>, VY: <null> }
    39) { IDX: B17, IDY: B7, VX: <null>, VY: <null> }
    40) { IDX: B17, IDY: B16, VX: <null>, VY: <null> }
    41) { IDX: B17, IDY: B17, VX: <null>, VY: <null> }
    42) { IDX: B17, IDY: B36, VX: <null>, VY: <null> }
    43) { IDX: B17, IDY: B37, VX: <null>, VY: <null> }
    44) { IDX: B20, IDY: B20, VX: 10, VY: 10 }
    45) { IDX: B20, IDY: B21, VX: 10, VY: 10 }
    46) { IDX: B21, IDY: B20, VX: 10, VY: 10 }
    47) { IDX: B21, IDY: B21, VX: 10, VY: 10 }
    48) { IDX: B22, IDY: B22, VX: 11, VY: 11 }
    49) { IDX: B22, IDY: B23, VX: 11, VY: 11 }
    50) { IDX: B23, IDY: B22, VX: 11, VY: 11 }
    51) { IDX: B23, IDY: B23, VX: 11, VY: 11 }
    52) { IDX: B24, IDY: B24, VX: 12, VY: 12 }
    53) { IDX: B24, IDY: B25, VX: 12, VY: 12 }
    54) { IDX: B25, IDY: B24, VX: 12, VY: 12 }
    55) { IDX: B25, IDY: B25, VX: 12, VY: 12 }
    56) { IDX: B28, IDY: B28, VX: 14, VY: 14 }
    57) { IDX: B28, IDY: B29, VX: 14, VY: 14 }
    58) { IDX: B29, IDY: B28, VX: 14, VY: 14 }
    59) { IDX: B29, IDY: B29, VX: 14, VY: 14 }
    60) { IDX: B30, IDY: B30, VX: 15, VY: 15 }
    61) { IDX: B30, IDY: B31, VX: 15, VY: 15 }
    62) { IDX: B31, IDY: B30, VX: 15, VY: 15 }
    63) { IDX: B31, IDY: B31, VX: 15, VY: 15 }
    64) { IDX: B32, IDY: B32, VX: 16, VY: 16 }
    65) { IDX: B32, IDY: B33, VX: 16, VY: 16 }
    66) { IDX: B33, IDY: B32, VX: 16, VY: 16 }
    67) { IDX: B33, IDY: B33, VX: 16, VY: 16 }
    68) { IDX: B36, IDY: B6, VX: <null>, VY: <null> }
    69) { IDX: B36, IDY: B7, VX: <null>, VY: <null> }
    70) { IDX: B36, IDY: B16, VX: <null>, VY: <null> }
    71) { IDX: B36, IDY: B17, VX: <null>, VY: <null> }
    72) { IDX: B36, IDY: B36, VX: <null>, VY: <null> }
    73) { IDX: B36, IDY: B37, VX: <null>, VY: <null> }
    74) { IDX: B37, IDY: B6, VX: <null>, VY: <null> }
    75) { IDX: B37, IDY: B7, VX: <null>, VY: <null> }
    76) { IDX: B37, IDY: B16, VX: <null>, VY: <null> }
    77) { IDX: B37, IDY: B17, VX: <null>, VY: <null> }
    78) { IDX: B37, IDY: B36, VX: <null>, VY: <null> }
    79) { IDX: B37, IDY: B37, VX: <null>, VY: <null> }
    80) { IDX: B38, IDY: B38, VX: 19, VY: 19 }
    81) { IDX: B38, IDY: B39, VX: 19, VY: 19 }
    82) { IDX: B39, IDY: B38, VX: 19, VY: 19 }
    83) { IDX: B39, IDY: B39, VX: 19, VY: 19 }
 8) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: B1, IDY: <null>, VX: 0, VY: -1 }
     2) { IDX: B4, IDY: <null>, VX: 2, VY: -1 }
     3) { IDX: B5, IDY: <null>, VX: 2, VY: -1 }
     4) { IDX: B6, IDY: C0, VX: <null>, VY: <null> }
     5) { IDX: B6, IDY: C1, VX: <null>, VY: <null> }
     6) { IDX: B6, IDY: C2, VX: <null>, VY: <null> }
     7) { IDX: B7, IDY: C0, VX: <null>, VY: <null> }
     8) { IDX: B7, IDY: C1, VX: <null>, VY: <null> }
     9) { IDX: B7, IDY: C2, VX: <null>, VY: <null> }
    10) { IDX: B8, IDY: <null>, VX: 4, VY: -1 }
    11) { IDX: B9, IDY: <null>, VX: 4, VY: -1 }
    12) { IDX: B12, IDY: <null>, VX: 6, VY: -1 }
    13) { IDX: B13, IDY: <null>, VX: 6, VY: -1 }
    14) { IDX: B14, IDY: <null>, VX: 7, VY: -1 }
    15) { IDX: B15, IDY: <null>, VX: 7, VY: -1 }
    16) { IDX: B16, IDY: C0, VX: <null>, VY: <null> }
    17) { IDX: B16, IDY: C1, VX: <null>, VY: <null> }
    18) { IDX: B16, IDY: C2, VX: <null>, VY: <null> }
    19) { IDX: B17, IDY: C0, VX: <null>, VY: <null> }
    20) { IDX: B17, IDY: C1, VX: <null>, VY: <null> }
    21) { IDX: B17, IDY: C2, VX: <null>, VY: <null> }
    22) { IDX: B20, IDY: <null>, VX: 10, VY: -1 }
    23) { IDX: B21, IDY: <null>, VX: 10, VY: -1 }
    24) { IDX: B22, IDY: <null>, VX: 11, VY: -1 }
    25) { IDX: B23, IDY: <null>, VX: 11, VY: -1 }
    26) { IDX: B24, IDY: <null>, VX: 12, VY: -1 }
    27) { IDX: B25, IDY: <null>, VX: 12, VY: -1 }
    28) { IDX: B28, IDY: <null>, VX: 14, VY: -1 }
    29) { IDX: B29, IDY: <null>, VX: 14, VY: -1 }
    30) { IDX: B30, IDY: <null>, VX: 15, VY: -1 }
    31) { IDX: B31, IDY: <null>, VX: 15, VY: -1 }
    32) { IDX: B32, IDY: <null>, VX: 16, VY: -1 }
    33) { IDX: B33, IDY: <null>, VX: 16, VY: -1 }
    34) { IDX: B36, IDY: C0, VX: <null>, VY: <null> }
    35) { IDX: B36, IDY: C1, VX: <null>, VY: <null> }
    36) { IDX: B36, IDY: C2, VX: <null>, VY: <null> }
    37) { IDX: B37, IDY: C0, VX: <null>, VY: <null> }
    38) { IDX: B37, IDY: C1, VX: <null>, VY: <null> }
    39) { IDX: B37, IDY: C2, VX: <null>, VY: <null> }
    40) { IDX: B38, IDY: <null>, VX: 19, VY: -1 }
    41) { IDX: B39, IDY: <null>, VX: 19, VY: -1 }
 9) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: B1, IDY: <null>, VX: 0, VY: -1 }
     2) { IDX: B4, IDY: <null>, VX: 2, VY: -1 }
     3) { IDX: B5, IDY: <null>, VX: 2, VY: -1 }
     4) { IDX: B6, IDY: <null>, VX: <null>, VY: -1 }
     5) { IDX: B7, IDY: <null>, VX: <null>, VY: -1 }
     6) { IDX: B8, IDY: <null>, VX: 4, VY: -1 }
     7) { IDX: B9, IDY: <null>, VX: 4, VY: -1 }
     8) { IDX: B12, IDY: <null>, VX: 6, VY: -1 }
     9) { IDX: B13, IDY: <null>, VX: 6, VY: -1 }
    10) { IDX: B14, IDY: <null>, VX: 7, VY: -1 }
    11) { IDX: B15, IDY: <null>, VX: 7, VY: -1 }
    12) { IDX: B16, IDY: <null>, VX: <null>, VY: -1 }
    13) { IDX: B17, IDY: <null>, VX: <null>, VY: -1 }
    14) { IDX: B20, IDY: <null>, VX: 10, VY: -1 }
    15) { IDX: B21, IDY: <null>, VX: 10, VY: -1 }
    16) { IDX: B22, IDY: D0, VX: 11, VY: 11 }
    17) { IDX: B23, IDY: D0, VX: 11, VY: 11 }
    18) { IDX: B24, IDY: D1, VX: 12, VY: 12 }
    19) { IDX: B25, IDY: D1, VX: 12, VY: 12 }
    20) { IDX: B28, IDY: <null>, VX: 14, VY: -1 }
    21) { IDX: B29, IDY: <null>, VX: 14, VY: -1 }
    22) { IDX: B30, IDY: <null>, VX: 15, VY: -1 }
    23) { IDX: B31, IDY: <null>, VX: 15, VY: -1 }
    24) { IDX: B32, IDY: <null>, VX: 16, VY: -1 }
    25) { IDX: B33, IDY: <null>, VX: 16, VY: -1 }
    26) { IDX: B36, IDY: <null>, VX: <null>, VY: -1 }
    27) { IDX: B37, IDY: <null>, VX: <null>, VY: -1 }
    28) { IDX: B38, IDY: <null>, VX: 19, VY: -1 }
    29) { IDX: B39, IDY: <null>, VX: 19, VY: -1 }
    30) { IDX: <null>, IDY: D2, VX: -1, VY: 13 }
10) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: B1, IDY: <null>, VX: 0, VY: -1 }
     2) { IDX: B4, IDY: <null>, VX: 2, VY: -1 }
     3) { IDX: B5, IDY: <null>, VX: 2, VY: -1 }
     4) { IDX: B6, IDY: <null>, VX: <null>, VY: -1 }
     5) { IDX: B7, IDY: <null>, VX: <null>, VY: -1 }
     6) { IDX: B8, IDY: <null>, VX: 4, VY: -1 }
     7) { IDX: B9, IDY: <null>, VX: 4, VY: -1 }
     8) { IDX: B12, IDY: <null>, VX: 6, VY: -1 }
     9) { IDX: B13, IDY: <null>, VX: 6, VY: -1 }
    10) { IDX: B14, IDY: <null>, VX: 7, VY: -1 }
    11) { IDX: B15, IDY: <null>, VX: 7, VY: -1 }
    12) { IDX: B16, IDY: <null>, VX: <null>, VY: -1 }
    13) { IDX: B17, IDY: <null>, VX: <null>, VY: -1 }
    14) { IDX: B20, IDY: <null>, VX: 10, VY: -1 }
    15) { IDX: B21, IDY: <null>, VX: 10, VY: -1 }
    16) { IDX: B22, IDY: <null>, VX: 11, VY: -1 }
    17) { IDX: B23, IDY: <null>, VX: 11, VY: -1 }
    18) { IDX: B24, IDY: <null>, VX: 12, VY: -1 }
    19) { IDX: B25, IDY: <null>, VX: 12, VY: -1 }
    20) { IDX: B28, IDY: <null>, VX: 14, VY: -1 }
    21) { IDX: B29, IDY: <null>, VX: 14, VY: -1 }
    22) { IDX: B30, IDY: <null>, VX: 15, VY: -1 }
    23) { IDX: B31, IDY: <null>, VX: 15, VY: -1 }
    24) { IDX: B32, IDY: <null>, VX: 16, VY: -1 }
    25) { IDX: B33, IDY: <null>, VX: 16, VY: -1 }
    26) { IDX: B36, IDY: <null>, VX: <null>, VY: -1 }
    27) { IDX: B37, IDY: <null>, VX: <null>, VY: -1 }
    28) { IDX: B38, IDY: <null>, VX: 19, VY: -1 }
    29) { IDX: B39, IDY: <null>, VX: 19, VY: -1 }
11) <null>
12) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: A3, VX: <null>, VY: <null> }
     1) { IDX: C0, IDY: A10, VX: <null>, VY: <null> }
     2) { IDX: C1, IDY: A3, VX: <null>, VY: <null> }
     3) { IDX: C1, IDY: A10, VX: <null>, VY: <null> }
     4) { IDX: C2, IDY: A3, VX: <null>, VY: <null> }
     5) { IDX: C2, IDY: A10, VX: <null>, VY: <null> }
     6) { IDX: <null>, IDY: A0, VX: -1, VY: 0 }
     7) { IDX: <null>, IDY: A1, VX: -1, VY: 1 }
     8) { IDX: <null>, IDY: A4, VX: -1, VY: 4 }
     9) { IDX: <null>, IDY: A6, VX: -1, VY: 6 }
    10) { IDX: <null>, IDY: A7, VX: -1, VY: 7 }
    11) { IDX: <null>, IDY: A9, VX: -1, VY: 9 }
    12) { IDX: <null>, IDY: A12, VX: -1, VY: 12 }
    13) { IDX: <null>, IDY: A13, VX: -1, VY: 13 }
    14) { IDX: <null>, IDY: A15, VX: -1, VY: 15 }
    15) { IDX: <null>, IDY: A16, VX: -1, VY: 16 }
    16) { IDX: <null>, IDY: A18, VX: -1, VY: 18 }
    17) { IDX: <null>, IDY: A19, VX: -1, VY: 19 }
13) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: B6, VX: <null>, VY: <null> }
     1) { IDX: C0, IDY: B7, VX: <null>, VY: <null> }
     2) { IDX: C0, IDY: B16, VX: <null>, VY: <null> }
     3) { IDX: C0, IDY: B17, VX: <null>, VY: <null> }
     4) { IDX: C0, IDY: B36, VX: <null>, VY: <null> }
     5) { IDX: C0, IDY: B37, VX: <null>, VY: <null> }
     6) { IDX: C1, IDY: B6, VX: <null>, VY: <null> }
     7) { IDX: C1, IDY: B7, VX: <null>, VY: <null> }
     8) { IDX: C1, IDY: B16, VX: <null>, VY: <null> }
     9) { IDX: C1, IDY: B17, VX: <null>, VY: <null> }
    10) { IDX: C1, IDY: B36, VX: <null>, VY: <null> }
    11) { IDX: C1, IDY: B37, VX: <null>, VY: <null> }
    12) { IDX: C2, IDY: B6, VX: <null>, VY: <null> }
    13) { IDX: C2, IDY: B7, VX: <null>, VY: <null> }
    14) { IDX: C2, IDY: B16, VX: <null>, VY: <null> }
    15) { IDX: C2, IDY: B17, VX: <null>, VY: <null> }
    16) { IDX: C2, IDY: B36, VX: <null>, VY: <null> }
    17) { IDX: C2, IDY: B37, VX: <null>, VY: <null> }
    18) { IDX: <null>, IDY: B0, VX: -1, VY: 0 }
    19) { IDX: <null>, IDY: B1, VX: -1, VY: 0 }
    20) { IDX: <null>, IDY: B4, VX: -1, VY: 2 }
    21) { IDX: <null>, IDY: B5, VX: -1, VY: 2 }
    22) { IDX: <null>, IDY: B8, VX: -1, VY: 4 }
    23) { IDX: <null>, IDY: B9, VX: -1, VY: 4 }
    24) { IDX: <null>, IDY: B12, VX: -1, VY: 6 }
    25) { IDX: <null>, IDY: B13, VX: -1, VY: 6 }
    26) { IDX: <null>, IDY: B14, VX: -1, VY: 7 }
    27) { IDX: <null>, IDY: B15, VX: -1, VY: 7 }
    28) { IDX: <null>, IDY: B20, VX: -1, VY: 10 }
    29) { IDX: <null>, IDY: B21, VX: -1, VY: 10 }
    30) { IDX: <null>, IDY: B22, VX: -1, VY: 11 }
    31) { IDX: <null>, IDY: B23, VX: -1, VY: 11 }
    32) { IDX: <null>, IDY: B24, VX: -1, VY: 12 }
    33) { IDX: <null>, IDY: B25, VX: -1, VY: 12 }
    34) { IDX: <null>, IDY: B28, VX: -1, VY: 14 }
    35) { IDX: <null>, IDY: B29, VX: -1, VY: 14 }
    36) { IDX: <null>, IDY: B30, VX: -1, VY: 15 }
    37) { IDX: <null>, IDY: B31, VX: -1, VY: 15 }
    38) { IDX: <null>, IDY: B32, VX: -1, VY: 16 }
    39) { IDX: <null>, IDY: B33, VX: -1, VY: 16 }
    40) { IDX: <null>, IDY: B38, VX: -1, VY: 19 }
    41) { IDX: <null>, IDY: B39, VX: -1, VY: 19 }
14) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: C0, VX: <null>, VY: <null> }
     1) { IDX: C0, IDY: C1, VX: <null>, VY: <null> }
     2) { IDX: C0, IDY: C2, VX: <null>, VY: <null> }
     3) { IDX: C1, IDY: C0, VX: <null>, VY: <null> }
     4) { IDX: C1, IDY: C1, VX: <null>, VY: <null> }
     5) { IDX: C1, IDY: C2, VX: <null>, VY: <null> }
     6) { IDX: C2, IDY: C0, VX: <null>, VY: <null> }
     7) { IDX: C2, IDY: C1, VX: <null>, VY: <null> }
     8) { IDX: C2, IDY: C2, VX: <null>, VY: <null> }
15) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: <null>, VX: <null>, VY: -1 }
     1) { IDX: C1, IDY: <null>, VX: <null>, VY: -1 }
     2) { IDX: C2, IDY: <null>, VX: <null>, VY: -1 }
     3) { IDX: <null>, IDY: D0, VX: -1, VY: 11 }
     4) { IDX: <null>, IDY: D1, VX: -1, VY: 12 }
     5) { IDX: <null>, IDY: D2, VX: -1, VY: 13 }
16) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: <null>, VX: <null>, VY: -1 }
     1) { IDX: C1, IDY: <null>, VX: <null>, VY: -1 }
     2) { IDX: C2, IDY: <null>, VX: <null>, VY: -1 }
17) <null>
18) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: <null>, VX: 11, VY: -1 }
     1) { IDX: D1, IDY: A12, VX: 12, VY: 12 }
     2) { IDX: D2, IDY: A13, VX: 13, VY: 13 }
     3) { IDX: <null>, IDY: A0, VX: -1, VY: 0 }
     4) { IDX: <null>, IDY: A1, VX: -1, VY: 1 }
     5) { IDX: <null>, IDY: A3, VX: -1, VY: <null> }
     6) { IDX: <null>, IDY: A4, VX: -1, VY: 4 }
     7) { IDX: <null>, IDY: A6, VX: -1, VY: 6 }
     8) { IDX: <null>, IDY: A7, VX: -1, VY: 7 }
     9) { IDX: <null>, IDY: A9, VX: -1, VY: 9 }
    10) { IDX: <null>, IDY: A10, VX: -1, VY: <null> }
    11) { IDX: <null>, IDY: A15, VX: -1, VY: 15 }
    12) { IDX: <null>, IDY: A16, VX: -1, VY: 16 }
    13) { IDX: <null>, IDY: A18, VX: -1, VY: 18 }
    14) { IDX: <null>, IDY: A19, VX: -1, VY: 19 }
19) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: B22, VX: 11, VY: 11 }
     1) { IDX: D0, IDY: B23, VX: 11, VY: 11 }
     2) { IDX: D1, IDY: B24, VX: 12, VY: 12 }
     3) { IDX: D1, IDY: B25, VX: 12, VY: 12 }
     4) { IDX: D2, IDY: <null>, VX: 13, VY: -1 }
     5) { IDX: <null>, IDY: B0, VX: -1, VY: 0 }
     6) { IDX: <null>, IDY: B1, VX: -1, VY: 0 }
     7) { IDX: <null>, IDY: B4, VX: -1, VY: 2 }
     8) { IDX: <null>, IDY: B5, VX: -1, VY: 2 }
     9) { IDX: <null>, IDY: B6, VX: -1, VY: <null> }
    10) { IDX: <null>, IDY: B7, VX: -1, VY: <null> }
    11) { IDX: <null>, IDY: B8, VX: -1, VY: 4 }
    12) { IDX: <null>, IDY: B9, VX: -1, VY: 4 }
    13) { IDX: <null>, IDY: B12, VX: -1, VY: 6 }
    14) { IDX: <null>, IDY: B13, VX: -1, VY: 6 }
    15) { IDX: <null>, IDY: B14, VX: -1, VY: 7 }
    16) { IDX: <null>, IDY: B15, VX: -1, VY: 7 }
    17) { IDX: <null>, IDY: B16, VX: -1, VY: <null> }
    18) { IDX: <null>, IDY: B17, VX: -1, VY: <null> }
    19) { IDX: <null>, IDY: B20, VX: -1, VY: 10 }
    20) { IDX: <null>, IDY: B21, VX: -1, VY: 10 }
    21) { IDX: <null>, IDY: B28, VX: -1, VY: 14 }
    22) { IDX: <null>, IDY: B29, VX: -1, VY: 14 }
    23) { IDX: <null>, IDY: B30, VX: -1, VY: 15 }
    24) { IDX: <null>, IDY: B31, VX: -1, VY: 15 }
    25) { IDX: <null>, IDY: B32, VX: -1, VY: 16 }
    26) { IDX: <null>, IDY: B33, VX: -1, VY: 16 }
    27) { IDX: <null>, IDY: B36, VX: -1, VY: <null> }
    28) { IDX: <null>, IDY: B37, VX: -1, VY: <null> }
    29) { IDX: <null>, IDY: B38, VX: -1, VY: 19 }
    30) { IDX: <null>, IDY: B39, VX: -1, VY: 19 }
20) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: <null>, VX: 11, VY: -1 }
     1) { IDX: D1, IDY: <null>, VX: 12, VY: -1 }
     2) { IDX: D2, IDY: <null>, VX: 13, VY: -1 }
     3) { IDX: <null>, IDY: C0, VX: -1, VY: <null> }
     4) { IDX: <null>, IDY: C1, VX: -1, VY: <null> }
     5) { IDX: <null>, IDY: C2, VX: -1, VY: <null> }
21) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: D0, VX: 11, VY: 11 }
     1) { IDX: D1, IDY: D1, VX: 12, VY: 12 }
     2) { IDX: D2, IDY: D2, VX: 13, VY: 13 }
22) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: <null>, VX: 11, VY: -1 }
     1) { IDX: D1, IDY: <null>, VX: 12, VY: -1 }
     2) { IDX: D2, IDY: <null>, VX: 13, VY: -1 }
23) <null>
24) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: <null>, IDY: A0, VX: -1, VY: 0 }
     1) { IDX: <null>, IDY: A1, VX: -1, VY: 1 }
     2) { IDX: <null>, IDY: A3, VX: -1, VY: <null> }
     3) { IDX: <null>, IDY: A4, VX: -1, VY: 4 }
     4) { IDX: <null>, IDY: A6, VX: -1, VY: 6 }
     5) { IDX: <null>, IDY: A7, VX: -1, VY: 7 }
     6) { IDX: <null>, IDY: A9, VX: -1, VY: 9 }
     7) { IDX: <null>, IDY: A10, VX: -1, VY: <null> }
     8) { IDX: <null>, IDY: A12, VX: -1, VY: 12 }
     9) { IDX: <null>, IDY: A13, VX: -1, VY: 13 }
    10) { IDX: <null>, IDY: A15, VX: -1, VY: 15 }
    11) { IDX: <null>, IDY: A16, VX: -1, VY: 16 }
    12) { IDX: <null>, IDY: A18, VX: -1, VY: 18 }
    13) { IDX: <null>, IDY: A19, VX: -1, VY: 19 }
25) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: <null>, IDY: B0, VX: -1, VY: 0 }
     1) { IDX: <null>, IDY: B1, VX: -1, VY: 0 }
     2) { IDX: <null>, IDY: B4, VX: -1, VY: 2 }
     3) { IDX: <null>, IDY: B5, VX: -1, VY: 2 }
     4) { IDX: <null>, IDY: B6, VX: -1, VY: <null> }
     5) { IDX: <null>, IDY: B7, VX: -1, VY: <null> }
     6) { IDX: <null>, IDY: B8, VX: -1, VY: 4 }
     7) { IDX: <null>, IDY: B9, VX: -1, VY: 4 }
     8) { IDX: <null>, IDY: B12, VX: -1, VY: 6 }
     9) { IDX: <null>, IDY: B13, VX: -1, VY: 6 }
    10) { IDX: <null>, IDY: B14, VX: -1, VY: 7 }
    11) { IDX: <null>, IDY: B15, VX: -1, VY: 7 }
    12) { IDX: <null>, IDY: B16, VX: -1, VY: <null> }
    13) { IDX: <null>, IDY: B17, VX: -1, VY: <null> }
    14) { IDX: <null>, IDY: B20, VX: -1, VY: 10 }
    15) { IDX: <null>, IDY: B21, VX: -1, VY: 10 }
    16) { IDX: <null>, IDY: B22, VX: -1, VY: 11 }
    17) { IDX: <null>, IDY: B23, VX: -1, VY: 11 }
    18) { IDX: <null>, IDY: B24, VX: -1, VY: 12 }
    19) { IDX: <null>, IDY: B25, VX: -1, VY: 12 }
    20) { IDX: <null>, IDY: B28, VX: -1, VY: 14 }
    21) { IDX: <null>, IDY: B29, VX: -1, VY: 14 }
    22) { IDX: <null>, IDY: B30, VX: -1, VY: 15 }
    23) { IDX: <null>, IDY: B31, VX: -1, VY: 15 }
    24) { IDX: <null>, IDY: B32, VX: -1, VY: 16 }
    25) { IDX: <null>, IDY: B33, VX: -1, VY: 16 }
    26) { IDX: <null>, IDY: B36, VX: -1, VY: <null> }
    27) { IDX: <null>, IDY: B37, VX: -1, VY: <null> }
    28) { IDX: <null>, IDY: B38, VX: -1, VY: 19 }
    29) { IDX: <null>, IDY: B39, VX: -1, VY: 19 }
26) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: <null>, IDY: C0, VX: -1, VY: <null> }
     1) { IDX: <null>, IDY: C1, VX: -1, VY: <null> }
     2) { IDX: <null>, IDY: C2, VX: -1, VY: <null> }
27) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: <null>, IDY: D0, VX: -1, VY: 11 }
     1) { IDX: <null>, IDY: D1, VX: -1, VY: 12 }
     2) { IDX: <null>, IDY: D2, VX: -1, VY: 13 }
28) Sequence: Seq<{str,str,i8,i8}>
29) <null>
30) <null>
31) <null>
32) <null>
33) <null>
34) <null>
35) <null>
*** Ctx ping count: 229
    [0:3](180=0+0+180): KeyJoin(*3: *1x, *4: *2x, [=] *3.V, *4.V, {IDX:*3.ID, IDY:*4.ID, VX:*3.V, VY:*4.V}, {IDX:*3.ID, VX:*3.V, VY:Opt<i8?>(-1)[, IDY:str(<null>)]}, {IDY:*4.ID, VX:Opt<i8?>(-1), VY:*4.V[, IDX:str(<null>)]})
    [3:5](49=7+42): CrossJoin(*1: XS, *2: YS, true, KeyJoin(*3: *1, *4: *2, [=] *3.V, *4.V, {IDX:*3.ID, IDY:*4.ID, VX:*3.V, VY:*4.V}, {IDX:*3.ID, VX:*3.V, VY:Opt<i8?>(-1)[, IDY:str(<null>)]}, {IDY:*4.ID, VX:Opt<i8?>(-1), VY:*4.V[, IDX:str(<null>)]}))
###
> CrossJoin(X:XS, Y:YS, true, CrossJoin(x:X, y:Y,      x.V $= y.V , { IDX:x.ID, IDY:y.ID, VX:x.V, VY:y.V }, { IDX:ID, VX:V, VY:-1 }, { IDY:ID, VX:-1, VY:V }))
CrossJoin(X : XS, Y : YS, true, CrossJoin(x : X, y : Y, x.V $= y.V, { IDX : x.ID, IDY : y.ID, VX : x.V, VY : y.V }, { IDX : ID, VX : V, VY : -1 }, { IDY : ID, VX : -1, VY : V })) : {IDX:s, IDY:s, VX:i8?, VY:i8?}**
BndKind:Call, Type:{IDX:s, IDY:s, VX:i8?, VY:i8?}**, Bnd:(Call(∂.CrossJoin([map:1] Global(XS), [map:2] Global(YS), true:b, Call(∂.KeyJoin([map:3] Scope(1), [map:4] Scope(2), GetField(Scope(3), V), GetField(Scope(4), V), {IDX:GetField(Scope(3), ID), IDY:GetField(Scope(4), ID), VX:GetField(Scope(3), V), VY:GetField(Scope(4), V)}, {IDX:GetField(Scope(3), ID), VX:GetField(Scope(3), V), VY:Opt<i8?>(-1:i8)[, IDY:str(<null>)]}, {IDY:GetField(Scope(4), ID), VX:Opt<i8?>(-1:i8), VY:GetField(Scope(4), V)[, IDX:str(<null>)]})))))
// (<ctx>, ∂.XS:{ID:s, V:i8?}**, ∂.YS:{ID:s, V:i8?}**) : {IDX:s, IDY:s, VX:i8?, VY:i8?}**
CrossJoin_2(Arr<obj>, Seq<{str,i8}>, Seq<{str,i8}>):bool
      1) ldc.i4.1
      1) ret
  Total Size: 2

KeyJoin_2(Arr<obj>, {str,i8}):Opt<i8>
      1) ldarg.1 [{str,i8}]
      1) dup
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      5) ldfld {str,i8}::_F1:i8
      5) newobj Opt<i8>(i8)
      5) br [1]
  Label [0]:
      1) pop
      5) call static CodeGenUtil::GetDefault():Opt<i8>
  Label [1]:
      1) ret
  Total Size: 36

KeyJoin_3(Arr<obj>, {str,i8}):Opt<i8>
      1) ldarg.1 [{str,i8}]
      1) dup
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      5) ldfld {str,i8}::_F1:i8
      5) newobj Opt<i8>(i8)
      5) br [1]
  Label [0]:
      1) pop
      5) call static CodeGenUtil::GetDefault():Opt<i8>
  Label [1]:
      1) ret
  Total Size: 36

KeyJoin_4(Arr<obj>, {str,i8}, {str,i8}):{str,str,i8,i8}
      5) newobj {str,str,i8,i8}()
      1) dup
      1) ldc.i4.3
      5) stfld {str,str,i8,i8}::_B0:u1
      1) stloc.0 [{str,str,i8,i8}]
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F0:str
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F1:str
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.4
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F1:i8
      5) stfld {str,str,i8,i8}::_F2:i8
  Label [0]:
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [1]
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.8
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F1:i8
      5) stfld {str,str,i8,i8}::_F3:i8
  Label [1]:
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 130

KeyJoin_5(Arr<obj>, {str,i8}):{str,str,i8,i8}
      5) newobj {str,str,i8,i8}()
      1) dup
      1) ldc.i4.3
      5) stfld {str,str,i8,i8}::_B0:u1
      1) stloc.0 [{str,str,i8,i8}]
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F0:str
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.4
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F1:i8
      5) stfld {str,str,i8,i8}::_F2:i8
  Label [0]:
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldc.i4.m1
      1) conv.i8
      5) stfld {str,str,i8,i8}::_F3:i8
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.8
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 101

KeyJoin_6(Arr<obj>, {str,i8}):{str,str,i8,i8}
      5) newobj {str,str,i8,i8}()
      1) dup
      1) ldc.i4.3
      5) stfld {str,str,i8,i8}::_B0:u1
      1) stloc.0 [{str,str,i8,i8}]
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F1:str
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldc.i4.m1
      1) conv.i8
      5) stfld {str,str,i8,i8}::_F2:i8
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.4
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.8
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F1:i8
      5) stfld {str,str,i8,i8}::_F3:i8
  Label [0]:
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 101

CrossJoin_3(Arr<obj>, Seq<{str,i8}>, Seq<{str,i8}>):Seq<{str,str,i8,i8}>
      1) ldarg.1 [Seq<{str,i8}>]
      1) ldarg.2 [Seq<{str,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<{str,i8},Opt<i8>>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [Func<{str,i8},Opt<i8>>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Func<{str,i8},{str,i8},{str,str,i8,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.3
      5) ldelem [Func<{str,i8},{str,str,i8,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.4
      5) ldelem [Func<{str,i8},{str,str,i8,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.5
      5) ldelem [EqualityComparer<Opt<i8>>]
      1) ldc.i4.1
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [ExecCtx]
      1) ldc.i4.0
      5) call static KeyJoinGen::Exec(Seq<{str,i8}>, Seq<{str,i8}>, Func<{str,i8},Opt<i8>>, Func<{str,i8},Opt<i8>>, Func<{str,i8},{str,i8},{str,str,i8,i8}>, Func<{str,i8},{str,str,i8,i8}>, Func<{str,i8},{str,str,i8,i8}>, EqualityComparer<Opt<i8>>, bool, ExecCtx, i4):Seq<{str,str,i8,i8}>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<{str,str,i8,i8}>):Seq<{str,str,i8,i8}>
      1) ret
  Total Size: 100

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):ExecCtx
      1) stloc.0 [ExecCtx]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<Seq<{str,i8}>>
      1) stloc.1 [Seq<Seq<{str,i8}>>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.2
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<Seq<{str,i8}>>
      1) stloc.2 [Seq<Seq<{str,i8}>>]
      1) ldloc.1 [Seq<Seq<{str,i8}>>]
      1) ldloc.2 [Seq<Seq<{str,i8}>>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<Seq<{str,i8}>,Seq<{str,i8}>,bool>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [MethodInfo]
      5) ldtoken [Func<Seq<{str,i8}>,Seq<{str,i8}>,Seq<{str,str,i8,i8}>>]
      5) call static Type::GetTypeFromHandle(RuntimeTypeHandle):Type
      1) ldc.i4.2
      5) newarr [obj]
      1) dup
      1) ldc.i4.0
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Arr<obj>]
      5) stelem [Arr<obj>]
      1) dup
      1) ldc.i4.1
      1) ldloc.0 [ExecCtx]
      5) stelem [ExecCtx]
      5) callvirt DynamicMethod::CreateDelegate(Type, obj):Delegate
      1) ldloc.0 [ExecCtx]
      1) ldc.i4.3
      5) call static CrossJoinGen::Exec(Seq<Seq<{str,i8}>>, Seq<Seq<{str,i8}>>, Func<Seq<{str,i8}>,Seq<{str,i8}>,bool>, Func<Seq<{str,i8}>,Seq<{str,i8}>,Seq<{str,str,i8,i8}>>, ExecCtx, i4):Seq<Seq<{str,str,i8,i8}>>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<Seq<{str,str,i8,i8}>>):Seq<Seq<{str,str,i8,i8}>>
      1) ret
  Total Size: 99

Func sig: (<ctx>:x, XS:{ID:s, V:i8?}**, YS:{ID:s, V:i8?}**) to {IDX:s, IDY:s, VX:i8?, VY:i8?}**
Sequence: Seq<Seq<{str,str,i8,i8}>>
 0) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: A0, VX: 0, VY: 0 }
     1) { IDX: <null>, IDY: A3, VX: -1, VY: <null> }
     2) { IDX: <null>, IDY: A10, VX: -1, VY: <null> }
     3) { IDX: A1, IDY: A1, VX: 1, VY: 1 }
     4) { IDX: A3, IDY: <null>, VX: <null>, VY: -1 }
     5) { IDX: A4, IDY: A4, VX: 4, VY: 4 }
     6) { IDX: A6, IDY: A6, VX: 6, VY: 6 }
     7) { IDX: A7, IDY: A7, VX: 7, VY: 7 }
     8) { IDX: A9, IDY: A9, VX: 9, VY: 9 }
     9) { IDX: A10, IDY: <null>, VX: <null>, VY: -1 }
    10) { IDX: A12, IDY: A12, VX: 12, VY: 12 }
    11) { IDX: A13, IDY: A13, VX: 13, VY: 13 }
    12) { IDX: A15, IDY: A15, VX: 15, VY: 15 }
    13) { IDX: A16, IDY: A16, VX: 16, VY: 16 }
    14) { IDX: A18, IDY: A18, VX: 18, VY: 18 }
    15) { IDX: A19, IDY: A19, VX: 19, VY: 19 }
 1) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: B0, VX: 0, VY: 0 }
     1) { IDX: A0, IDY: B1, VX: 0, VY: 0 }
     2) { IDX: <null>, IDY: B6, VX: -1, VY: <null> }
     3) { IDX: <null>, IDY: B7, VX: -1, VY: <null> }
     4) { IDX: <null>, IDY: B16, VX: -1, VY: <null> }
     5) { IDX: <null>, IDY: B17, VX: -1, VY: <null> }
     6) { IDX: <null>, IDY: B36, VX: -1, VY: <null> }
     7) { IDX: <null>, IDY: B37, VX: -1, VY: <null> }
     8) { IDX: A1, IDY: <null>, VX: 1, VY: -1 }
     9) { IDX: A3, IDY: <null>, VX: <null>, VY: -1 }
    10) { IDX: A4, IDY: B8, VX: 4, VY: 4 }
    11) { IDX: A4, IDY: B9, VX: 4, VY: 4 }
    12) { IDX: A6, IDY: B12, VX: 6, VY: 6 }
    13) { IDX: A6, IDY: B13, VX: 6, VY: 6 }
    14) { IDX: A7, IDY: B14, VX: 7, VY: 7 }
    15) { IDX: A7, IDY: B15, VX: 7, VY: 7 }
    16) { IDX: A9, IDY: <null>, VX: 9, VY: -1 }
    17) { IDX: A10, IDY: <null>, VX: <null>, VY: -1 }
    18) { IDX: A12, IDY: B24, VX: 12, VY: 12 }
    19) { IDX: A12, IDY: B25, VX: 12, VY: 12 }
    20) { IDX: A13, IDY: <null>, VX: 13, VY: -1 }
    21) { IDX: A15, IDY: B30, VX: 15, VY: 15 }
    22) { IDX: A15, IDY: B31, VX: 15, VY: 15 }
    23) { IDX: A16, IDY: B32, VX: 16, VY: 16 }
    24) { IDX: A16, IDY: B33, VX: 16, VY: 16 }
    25) { IDX: A18, IDY: <null>, VX: 18, VY: -1 }
    26) { IDX: A19, IDY: B38, VX: 19, VY: 19 }
    27) { IDX: A19, IDY: B39, VX: 19, VY: 19 }
    28) { IDX: <null>, IDY: B4, VX: -1, VY: 2 }
    29) { IDX: <null>, IDY: B5, VX: -1, VY: 2 }
    30) { IDX: <null>, IDY: B20, VX: -1, VY: 10 }
    31) { IDX: <null>, IDY: B21, VX: -1, VY: 10 }
    32) { IDX: <null>, IDY: B22, VX: -1, VY: 11 }
    33) { IDX: <null>, IDY: B23, VX: -1, VY: 11 }
    34) { IDX: <null>, IDY: B28, VX: -1, VY: 14 }
    35) { IDX: <null>, IDY: B29, VX: -1, VY: 14 }
 2) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: <null>, IDY: C0, VX: -1, VY: <null> }
     1) { IDX: <null>, IDY: C1, VX: -1, VY: <null> }
     2) { IDX: <null>, IDY: C2, VX: -1, VY: <null> }
     3) { IDX: A0, IDY: <null>, VX: 0, VY: -1 }
     4) { IDX: A1, IDY: <null>, VX: 1, VY: -1 }
     5) { IDX: A3, IDY: <null>, VX: <null>, VY: -1 }
     6) { IDX: A4, IDY: <null>, VX: 4, VY: -1 }
     7) { IDX: A6, IDY: <null>, VX: 6, VY: -1 }
     8) { IDX: A7, IDY: <null>, VX: 7, VY: -1 }
     9) { IDX: A9, IDY: <null>, VX: 9, VY: -1 }
    10) { IDX: A10, IDY: <null>, VX: <null>, VY: -1 }
    11) { IDX: A12, IDY: <null>, VX: 12, VY: -1 }
    12) { IDX: A13, IDY: <null>, VX: 13, VY: -1 }
    13) { IDX: A15, IDY: <null>, VX: 15, VY: -1 }
    14) { IDX: A16, IDY: <null>, VX: 16, VY: -1 }
    15) { IDX: A18, IDY: <null>, VX: 18, VY: -1 }
    16) { IDX: A19, IDY: <null>, VX: 19, VY: -1 }
 3) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: A1, IDY: <null>, VX: 1, VY: -1 }
     2) { IDX: A3, IDY: <null>, VX: <null>, VY: -1 }
     3) { IDX: A4, IDY: <null>, VX: 4, VY: -1 }
     4) { IDX: A6, IDY: <null>, VX: 6, VY: -1 }
     5) { IDX: A7, IDY: <null>, VX: 7, VY: -1 }
     6) { IDX: A9, IDY: <null>, VX: 9, VY: -1 }
     7) { IDX: A10, IDY: <null>, VX: <null>, VY: -1 }
     8) { IDX: A12, IDY: D1, VX: 12, VY: 12 }
     9) { IDX: A13, IDY: D2, VX: 13, VY: 13 }
    10) { IDX: A15, IDY: <null>, VX: 15, VY: -1 }
    11) { IDX: A16, IDY: <null>, VX: 16, VY: -1 }
    12) { IDX: A18, IDY: <null>, VX: 18, VY: -1 }
    13) { IDX: A19, IDY: <null>, VX: 19, VY: -1 }
    14) { IDX: <null>, IDY: D0, VX: -1, VY: 11 }
 4) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: A1, IDY: <null>, VX: 1, VY: -1 }
     2) { IDX: A3, IDY: <null>, VX: <null>, VY: -1 }
     3) { IDX: A4, IDY: <null>, VX: 4, VY: -1 }
     4) { IDX: A6, IDY: <null>, VX: 6, VY: -1 }
     5) { IDX: A7, IDY: <null>, VX: 7, VY: -1 }
     6) { IDX: A9, IDY: <null>, VX: 9, VY: -1 }
     7) { IDX: A10, IDY: <null>, VX: <null>, VY: -1 }
     8) { IDX: A12, IDY: <null>, VX: 12, VY: -1 }
     9) { IDX: A13, IDY: <null>, VX: 13, VY: -1 }
    10) { IDX: A15, IDY: <null>, VX: 15, VY: -1 }
    11) { IDX: A16, IDY: <null>, VX: 16, VY: -1 }
    12) { IDX: A18, IDY: <null>, VX: 18, VY: -1 }
    13) { IDX: A19, IDY: <null>, VX: 19, VY: -1 }
 5) <null>
 6) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: A0, VX: 0, VY: 0 }
     1) { IDX: <null>, IDY: A3, VX: -1, VY: <null> }
     2) { IDX: <null>, IDY: A10, VX: -1, VY: <null> }
     3) { IDX: B1, IDY: A0, VX: 0, VY: 0 }
     4) { IDX: B4, IDY: <null>, VX: 2, VY: -1 }
     5) { IDX: B5, IDY: <null>, VX: 2, VY: -1 }
     6) { IDX: B6, IDY: <null>, VX: <null>, VY: -1 }
     7) { IDX: B7, IDY: <null>, VX: <null>, VY: -1 }
     8) { IDX: B8, IDY: A4, VX: 4, VY: 4 }
     9) { IDX: B9, IDY: A4, VX: 4, VY: 4 }
    10) { IDX: B12, IDY: A6, VX: 6, VY: 6 }
    11) { IDX: B13, IDY: A6, VX: 6, VY: 6 }
    12) { IDX: B14, IDY: A7, VX: 7, VY: 7 }
    13) { IDX: B15, IDY: A7, VX: 7, VY: 7 }
    14) { IDX: B16, IDY: <null>, VX: <null>, VY: -1 }
    15) { IDX: B17, IDY: <null>, VX: <null>, VY: -1 }
    16) { IDX: B20, IDY: <null>, VX: 10, VY: -1 }
    17) { IDX: B21, IDY: <null>, VX: 10, VY: -1 }
    18) { IDX: B22, IDY: <null>, VX: 11, VY: -1 }
    19) { IDX: B23, IDY: <null>, VX: 11, VY: -1 }
    20) { IDX: B24, IDY: A12, VX: 12, VY: 12 }
    21) { IDX: B25, IDY: A12, VX: 12, VY: 12 }
    22) { IDX: B28, IDY: <null>, VX: 14, VY: -1 }
    23) { IDX: B29, IDY: <null>, VX: 14, VY: -1 }
    24) { IDX: B30, IDY: A15, VX: 15, VY: 15 }
    25) { IDX: B31, IDY: A15, VX: 15, VY: 15 }
    26) { IDX: B32, IDY: A16, VX: 16, VY: 16 }
    27) { IDX: B33, IDY: A16, VX: 16, VY: 16 }
    28) { IDX: B36, IDY: <null>, VX: <null>, VY: -1 }
    29) { IDX: B37, IDY: <null>, VX: <null>, VY: -1 }
    30) { IDX: B38, IDY: A19, VX: 19, VY: 19 }
    31) { IDX: B39, IDY: A19, VX: 19, VY: 19 }
    32) { IDX: <null>, IDY: A1, VX: -1, VY: 1 }
    33) { IDX: <null>, IDY: A9, VX: -1, VY: 9 }
    34) { IDX: <null>, IDY: A13, VX: -1, VY: 13 }
    35) { IDX: <null>, IDY: A18, VX: -1, VY: 18 }
 7) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: B0, VX: 0, VY: 0 }
     1) { IDX: B0, IDY: B1, VX: 0, VY: 0 }
     2) { IDX: <null>, IDY: B6, VX: -1, VY: <null> }
     3) { IDX: <null>, IDY: B7, VX: -1, VY: <null> }
     4) { IDX: <null>, IDY: B16, VX: -1, VY: <null> }
     5) { IDX: <null>, IDY: B17, VX: -1, VY: <null> }
     6) { IDX: <null>, IDY: B36, VX: -1, VY: <null> }
     7) { IDX: <null>, IDY: B37, VX: -1, VY: <null> }
     8) { IDX: B1, IDY: B0, VX: 0, VY: 0 }
     9) { IDX: B1, IDY: B1, VX: 0, VY: 0 }
    10) { IDX: B4, IDY: B4, VX: 2, VY: 2 }
    11) { IDX: B4, IDY: B5, VX: 2, VY: 2 }
    12) { IDX: B5, IDY: B4, VX: 2, VY: 2 }
    13) { IDX: B5, IDY: B5, VX: 2, VY: 2 }
    14) { IDX: B6, IDY: <null>, VX: <null>, VY: -1 }
    15) { IDX: B7, IDY: <null>, VX: <null>, VY: -1 }
    16) { IDX: B8, IDY: B8, VX: 4, VY: 4 }
    17) { IDX: B8, IDY: B9, VX: 4, VY: 4 }
    18) { IDX: B9, IDY: B8, VX: 4, VY: 4 }
    19) { IDX: B9, IDY: B9, VX: 4, VY: 4 }
    20) { IDX: B12, IDY: B12, VX: 6, VY: 6 }
    21) { IDX: B12, IDY: B13, VX: 6, VY: 6 }
    22) { IDX: B13, IDY: B12, VX: 6, VY: 6 }
    23) { IDX: B13, IDY: B13, VX: 6, VY: 6 }
    24) { IDX: B14, IDY: B14, VX: 7, VY: 7 }
    25) { IDX: B14, IDY: B15, VX: 7, VY: 7 }
    26) { IDX: B15, IDY: B14, VX: 7, VY: 7 }
    27) { IDX: B15, IDY: B15, VX: 7, VY: 7 }
    28) { IDX: B16, IDY: <null>, VX: <null>, VY: -1 }
    29) { IDX: B17, IDY: <null>, VX: <null>, VY: -1 }
    30) { IDX: B20, IDY: B20, VX: 10, VY: 10 }
    31) { IDX: B20, IDY: B21, VX: 10, VY: 10 }
    32) { IDX: B21, IDY: B20, VX: 10, VY: 10 }
    33) { IDX: B21, IDY: B21, VX: 10, VY: 10 }
    34) { IDX: B22, IDY: B22, VX: 11, VY: 11 }
    35) { IDX: B22, IDY: B23, VX: 11, VY: 11 }
    36) { IDX: B23, IDY: B22, VX: 11, VY: 11 }
    37) { IDX: B23, IDY: B23, VX: 11, VY: 11 }
    38) { IDX: B24, IDY: B24, VX: 12, VY: 12 }
    39) { IDX: B24, IDY: B25, VX: 12, VY: 12 }
    40) { IDX: B25, IDY: B24, VX: 12, VY: 12 }
    41) { IDX: B25, IDY: B25, VX: 12, VY: 12 }
    42) { IDX: B28, IDY: B28, VX: 14, VY: 14 }
    43) { IDX: B28, IDY: B29, VX: 14, VY: 14 }
    44) { IDX: B29, IDY: B28, VX: 14, VY: 14 }
    45) { IDX: B29, IDY: B29, VX: 14, VY: 14 }
    46) { IDX: B30, IDY: B30, VX: 15, VY: 15 }
    47) { IDX: B30, IDY: B31, VX: 15, VY: 15 }
    48) { IDX: B31, IDY: B30, VX: 15, VY: 15 }
    49) { IDX: B31, IDY: B31, VX: 15, VY: 15 }
    50) { IDX: B32, IDY: B32, VX: 16, VY: 16 }
    51) { IDX: B32, IDY: B33, VX: 16, VY: 16 }
    52) { IDX: B33, IDY: B32, VX: 16, VY: 16 }
    53) { IDX: B33, IDY: B33, VX: 16, VY: 16 }
    54) { IDX: B36, IDY: <null>, VX: <null>, VY: -1 }
    55) { IDX: B37, IDY: <null>, VX: <null>, VY: -1 }
    56) { IDX: B38, IDY: B38, VX: 19, VY: 19 }
    57) { IDX: B38, IDY: B39, VX: 19, VY: 19 }
    58) { IDX: B39, IDY: B38, VX: 19, VY: 19 }
    59) { IDX: B39, IDY: B39, VX: 19, VY: 19 }
 8) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: <null>, IDY: C0, VX: -1, VY: <null> }
     1) { IDX: <null>, IDY: C1, VX: -1, VY: <null> }
     2) { IDX: <null>, IDY: C2, VX: -1, VY: <null> }
     3) { IDX: B0, IDY: <null>, VX: 0, VY: -1 }
     4) { IDX: B1, IDY: <null>, VX: 0, VY: -1 }
     5) { IDX: B4, IDY: <null>, VX: 2, VY: -1 }
     6) { IDX: B5, IDY: <null>, VX: 2, VY: -1 }
     7) { IDX: B6, IDY: <null>, VX: <null>, VY: -1 }
     8) { IDX: B7, IDY: <null>, VX: <null>, VY: -1 }
     9) { IDX: B8, IDY: <null>, VX: 4, VY: -1 }
    10) { IDX: B9, IDY: <null>, VX: 4, VY: -1 }
    11) { IDX: B12, IDY: <null>, VX: 6, VY: -1 }
    12) { IDX: B13, IDY: <null>, VX: 6, VY: -1 }
    13) { IDX: B14, IDY: <null>, VX: 7, VY: -1 }
    14) { IDX: B15, IDY: <null>, VX: 7, VY: -1 }
    15) { IDX: B16, IDY: <null>, VX: <null>, VY: -1 }
    16) { IDX: B17, IDY: <null>, VX: <null>, VY: -1 }
    17) { IDX: B20, IDY: <null>, VX: 10, VY: -1 }
    18) { IDX: B21, IDY: <null>, VX: 10, VY: -1 }
    19) { IDX: B22, IDY: <null>, VX: 11, VY: -1 }
    20) { IDX: B23, IDY: <null>, VX: 11, VY: -1 }
    21) { IDX: B24, IDY: <null>, VX: 12, VY: -1 }
    22) { IDX: B25, IDY: <null>, VX: 12, VY: -1 }
    23) { IDX: B28, IDY: <null>, VX: 14, VY: -1 }
    24) { IDX: B29, IDY: <null>, VX: 14, VY: -1 }
    25) { IDX: B30, IDY: <null>, VX: 15, VY: -1 }
    26) { IDX: B31, IDY: <null>, VX: 15, VY: -1 }
    27) { IDX: B32, IDY: <null>, VX: 16, VY: -1 }
    28) { IDX: B33, IDY: <null>, VX: 16, VY: -1 }
    29) { IDX: B36, IDY: <null>, VX: <null>, VY: -1 }
    30) { IDX: B37, IDY: <null>, VX: <null>, VY: -1 }
    31) { IDX: B38, IDY: <null>, VX: 19, VY: -1 }
    32) { IDX: B39, IDY: <null>, VX: 19, VY: -1 }
 9) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: B1, IDY: <null>, VX: 0, VY: -1 }
     2) { IDX: B4, IDY: <null>, VX: 2, VY: -1 }
     3) { IDX: B5, IDY: <null>, VX: 2, VY: -1 }
     4) { IDX: B6, IDY: <null>, VX: <null>, VY: -1 }
     5) { IDX: B7, IDY: <null>, VX: <null>, VY: -1 }
     6) { IDX: B8, IDY: <null>, VX: 4, VY: -1 }
     7) { IDX: B9, IDY: <null>, VX: 4, VY: -1 }
     8) { IDX: B12, IDY: <null>, VX: 6, VY: -1 }
     9) { IDX: B13, IDY: <null>, VX: 6, VY: -1 }
    10) { IDX: B14, IDY: <null>, VX: 7, VY: -1 }
    11) { IDX: B15, IDY: <null>, VX: 7, VY: -1 }
    12) { IDX: B16, IDY: <null>, VX: <null>, VY: -1 }
    13) { IDX: B17, IDY: <null>, VX: <null>, VY: -1 }
    14) { IDX: B20, IDY: <null>, VX: 10, VY: -1 }
    15) { IDX: B21, IDY: <null>, VX: 10, VY: -1 }
    16) { IDX: B22, IDY: D0, VX: 11, VY: 11 }
    17) { IDX: B23, IDY: D0, VX: 11, VY: 11 }
    18) { IDX: B24, IDY: D1, VX: 12, VY: 12 }
    19) { IDX: B25, IDY: D1, VX: 12, VY: 12 }
    20) { IDX: B28, IDY: <null>, VX: 14, VY: -1 }
    21) { IDX: B29, IDY: <null>, VX: 14, VY: -1 }
    22) { IDX: B30, IDY: <null>, VX: 15, VY: -1 }
    23) { IDX: B31, IDY: <null>, VX: 15, VY: -1 }
    24) { IDX: B32, IDY: <null>, VX: 16, VY: -1 }
    25) { IDX: B33, IDY: <null>, VX: 16, VY: -1 }
    26) { IDX: B36, IDY: <null>, VX: <null>, VY: -1 }
    27) { IDX: B37, IDY: <null>, VX: <null>, VY: -1 }
    28) { IDX: B38, IDY: <null>, VX: 19, VY: -1 }
    29) { IDX: B39, IDY: <null>, VX: 19, VY: -1 }
    30) { IDX: <null>, IDY: D2, VX: -1, VY: 13 }
10) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: B1, IDY: <null>, VX: 0, VY: -1 }
     2) { IDX: B4, IDY: <null>, VX: 2, VY: -1 }
     3) { IDX: B5, IDY: <null>, VX: 2, VY: -1 }
     4) { IDX: B6, IDY: <null>, VX: <null>, VY: -1 }
     5) { IDX: B7, IDY: <null>, VX: <null>, VY: -1 }
     6) { IDX: B8, IDY: <null>, VX: 4, VY: -1 }
     7) { IDX: B9, IDY: <null>, VX: 4, VY: -1 }
     8) { IDX: B12, IDY: <null>, VX: 6, VY: -1 }
     9) { IDX: B13, IDY: <null>, VX: 6, VY: -1 }
    10) { IDX: B14, IDY: <null>, VX: 7, VY: -1 }
    11) { IDX: B15, IDY: <null>, VX: 7, VY: -1 }
    12) { IDX: B16, IDY: <null>, VX: <null>, VY: -1 }
    13) { IDX: B17, IDY: <null>, VX: <null>, VY: -1 }
    14) { IDX: B20, IDY: <null>, VX: 10, VY: -1 }
    15) { IDX: B21, IDY: <null>, VX: 10, VY: -1 }
    16) { IDX: B22, IDY: <null>, VX: 11, VY: -1 }
    17) { IDX: B23, IDY: <null>, VX: 11, VY: -1 }
    18) { IDX: B24, IDY: <null>, VX: 12, VY: -1 }
    19) { IDX: B25, IDY: <null>, VX: 12, VY: -1 }
    20) { IDX: B28, IDY: <null>, VX: 14, VY: -1 }
    21) { IDX: B29, IDY: <null>, VX: 14, VY: -1 }
    22) { IDX: B30, IDY: <null>, VX: 15, VY: -1 }
    23) { IDX: B31, IDY: <null>, VX: 15, VY: -1 }
    24) { IDX: B32, IDY: <null>, VX: 16, VY: -1 }
    25) { IDX: B33, IDY: <null>, VX: 16, VY: -1 }
    26) { IDX: B36, IDY: <null>, VX: <null>, VY: -1 }
    27) { IDX: B37, IDY: <null>, VX: <null>, VY: -1 }
    28) { IDX: B38, IDY: <null>, VX: 19, VY: -1 }
    29) { IDX: B39, IDY: <null>, VX: 19, VY: -1 }
11) <null>
12) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: <null>, VX: <null>, VY: -1 }
     1) { IDX: C1, IDY: <null>, VX: <null>, VY: -1 }
     2) { IDX: C2, IDY: <null>, VX: <null>, VY: -1 }
     3) { IDX: <null>, IDY: A0, VX: -1, VY: 0 }
     4) { IDX: <null>, IDY: A1, VX: -1, VY: 1 }
     5) { IDX: <null>, IDY: A3, VX: -1, VY: <null> }
     6) { IDX: <null>, IDY: A4, VX: -1, VY: 4 }
     7) { IDX: <null>, IDY: A6, VX: -1, VY: 6 }
     8) { IDX: <null>, IDY: A7, VX: -1, VY: 7 }
     9) { IDX: <null>, IDY: A9, VX: -1, VY: 9 }
    10) { IDX: <null>, IDY: A10, VX: -1, VY: <null> }
    11) { IDX: <null>, IDY: A12, VX: -1, VY: 12 }
    12) { IDX: <null>, IDY: A13, VX: -1, VY: 13 }
    13) { IDX: <null>, IDY: A15, VX: -1, VY: 15 }
    14) { IDX: <null>, IDY: A16, VX: -1, VY: 16 }
    15) { IDX: <null>, IDY: A18, VX: -1, VY: 18 }
    16) { IDX: <null>, IDY: A19, VX: -1, VY: 19 }
13) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: <null>, VX: <null>, VY: -1 }
     1) { IDX: C1, IDY: <null>, VX: <null>, VY: -1 }
     2) { IDX: C2, IDY: <null>, VX: <null>, VY: -1 }
     3) { IDX: <null>, IDY: B0, VX: -1, VY: 0 }
     4) { IDX: <null>, IDY: B1, VX: -1, VY: 0 }
     5) { IDX: <null>, IDY: B4, VX: -1, VY: 2 }
     6) { IDX: <null>, IDY: B5, VX: -1, VY: 2 }
     7) { IDX: <null>, IDY: B6, VX: -1, VY: <null> }
     8) { IDX: <null>, IDY: B7, VX: -1, VY: <null> }
     9) { IDX: <null>, IDY: B8, VX: -1, VY: 4 }
    10) { IDX: <null>, IDY: B9, VX: -1, VY: 4 }
    11) { IDX: <null>, IDY: B12, VX: -1, VY: 6 }
    12) { IDX: <null>, IDY: B13, VX: -1, VY: 6 }
    13) { IDX: <null>, IDY: B14, VX: -1, VY: 7 }
    14) { IDX: <null>, IDY: B15, VX: -1, VY: 7 }
    15) { IDX: <null>, IDY: B16, VX: -1, VY: <null> }
    16) { IDX: <null>, IDY: B17, VX: -1, VY: <null> }
    17) { IDX: <null>, IDY: B20, VX: -1, VY: 10 }
    18) { IDX: <null>, IDY: B21, VX: -1, VY: 10 }
    19) { IDX: <null>, IDY: B22, VX: -1, VY: 11 }
    20) { IDX: <null>, IDY: B23, VX: -1, VY: 11 }
    21) { IDX: <null>, IDY: B24, VX: -1, VY: 12 }
    22) { IDX: <null>, IDY: B25, VX: -1, VY: 12 }
    23) { IDX: <null>, IDY: B28, VX: -1, VY: 14 }
    24) { IDX: <null>, IDY: B29, VX: -1, VY: 14 }
    25) { IDX: <null>, IDY: B30, VX: -1, VY: 15 }
    26) { IDX: <null>, IDY: B31, VX: -1, VY: 15 }
    27) { IDX: <null>, IDY: B32, VX: -1, VY: 16 }
    28) { IDX: <null>, IDY: B33, VX: -1, VY: 16 }
    29) { IDX: <null>, IDY: B36, VX: -1, VY: <null> }
    30) { IDX: <null>, IDY: B37, VX: -1, VY: <null> }
    31) { IDX: <null>, IDY: B38, VX: -1, VY: 19 }
    32) { IDX: <null>, IDY: B39, VX: -1, VY: 19 }
14) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: <null>, VX: <null>, VY: -1 }
     1) { IDX: C1, IDY: <null>, VX: <null>, VY: -1 }
     2) { IDX: C2, IDY: <null>, VX: <null>, VY: -1 }
     3) { IDX: <null>, IDY: C0, VX: -1, VY: <null> }
     4) { IDX: <null>, IDY: C1, VX: -1, VY: <null> }
     5) { IDX: <null>, IDY: C2, VX: -1, VY: <null> }
15) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: <null>, VX: <null>, VY: -1 }
     1) { IDX: C1, IDY: <null>, VX: <null>, VY: -1 }
     2) { IDX: C2, IDY: <null>, VX: <null>, VY: -1 }
     3) { IDX: <null>, IDY: D0, VX: -1, VY: 11 }
     4) { IDX: <null>, IDY: D1, VX: -1, VY: 12 }
     5) { IDX: <null>, IDY: D2, VX: -1, VY: 13 }
16) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: <null>, VX: <null>, VY: -1 }
     1) { IDX: C1, IDY: <null>, VX: <null>, VY: -1 }
     2) { IDX: C2, IDY: <null>, VX: <null>, VY: -1 }
17) <null>
18) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: <null>, IDY: A3, VX: -1, VY: <null> }
     1) { IDX: <null>, IDY: A10, VX: -1, VY: <null> }
     2) { IDX: D0, IDY: <null>, VX: 11, VY: -1 }
     3) { IDX: D1, IDY: A12, VX: 12, VY: 12 }
     4) { IDX: D2, IDY: A13, VX: 13, VY: 13 }
     5) { IDX: <null>, IDY: A0, VX: -1, VY: 0 }
     6) { IDX: <null>, IDY: A1, VX: -1, VY: 1 }
     7) { IDX: <null>, IDY: A4, VX: -1, VY: 4 }
     8) { IDX: <null>, IDY: A6, VX: -1, VY: 6 }
     9) { IDX: <null>, IDY: A7, VX: -1, VY: 7 }
    10) { IDX: <null>, IDY: A9, VX: -1, VY: 9 }
    11) { IDX: <null>, IDY: A15, VX: -1, VY: 15 }
    12) { IDX: <null>, IDY: A16, VX: -1, VY: 16 }
    13) { IDX: <null>, IDY: A18, VX: -1, VY: 18 }
    14) { IDX: <null>, IDY: A19, VX: -1, VY: 19 }
19) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: <null>, IDY: B6, VX: -1, VY: <null> }
     1) { IDX: <null>, IDY: B7, VX: -1, VY: <null> }
     2) { IDX: <null>, IDY: B16, VX: -1, VY: <null> }
     3) { IDX: <null>, IDY: B17, VX: -1, VY: <null> }
     4) { IDX: D0, IDY: B22, VX: 11, VY: 11 }
     5) { IDX: D0, IDY: B23, VX: 11, VY: 11 }
     6) { IDX: <null>, IDY: B36, VX: -1, VY: <null> }
     7) { IDX: <null>, IDY: B37, VX: -1, VY: <null> }
     8) { IDX: D1, IDY: B24, VX: 12, VY: 12 }
     9) { IDX: D1, IDY: B25, VX: 12, VY: 12 }
    10) { IDX: D2, IDY: <null>, VX: 13, VY: -1 }
    11) { IDX: <null>, IDY: B0, VX: -1, VY: 0 }
    12) { IDX: <null>, IDY: B1, VX: -1, VY: 0 }
    13) { IDX: <null>, IDY: B4, VX: -1, VY: 2 }
    14) { IDX: <null>, IDY: B5, VX: -1, VY: 2 }
    15) { IDX: <null>, IDY: B8, VX: -1, VY: 4 }
    16) { IDX: <null>, IDY: B9, VX: -1, VY: 4 }
    17) { IDX: <null>, IDY: B12, VX: -1, VY: 6 }
    18) { IDX: <null>, IDY: B13, VX: -1, VY: 6 }
    19) { IDX: <null>, IDY: B14, VX: -1, VY: 7 }
    20) { IDX: <null>, IDY: B15, VX: -1, VY: 7 }
    21) { IDX: <null>, IDY: B20, VX: -1, VY: 10 }
    22) { IDX: <null>, IDY: B21, VX: -1, VY: 10 }
    23) { IDX: <null>, IDY: B28, VX: -1, VY: 14 }
    24) { IDX: <null>, IDY: B29, VX: -1, VY: 14 }
    25) { IDX: <null>, IDY: B30, VX: -1, VY: 15 }
    26) { IDX: <null>, IDY: B31, VX: -1, VY: 15 }
    27) { IDX: <null>, IDY: B32, VX: -1, VY: 16 }
    28) { IDX: <null>, IDY: B33, VX: -1, VY: 16 }
    29) { IDX: <null>, IDY: B38, VX: -1, VY: 19 }
    30) { IDX: <null>, IDY: B39, VX: -1, VY: 19 }
20) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: <null>, IDY: C0, VX: -1, VY: <null> }
     1) { IDX: <null>, IDY: C1, VX: -1, VY: <null> }
     2) { IDX: <null>, IDY: C2, VX: -1, VY: <null> }
     3) { IDX: D0, IDY: <null>, VX: 11, VY: -1 }
     4) { IDX: D1, IDY: <null>, VX: 12, VY: -1 }
     5) { IDX: D2, IDY: <null>, VX: 13, VY: -1 }
21) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: D0, VX: 11, VY: 11 }
     1) { IDX: D1, IDY: D1, VX: 12, VY: 12 }
     2) { IDX: D2, IDY: D2, VX: 13, VY: 13 }
22) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: <null>, VX: 11, VY: -1 }
     1) { IDX: D1, IDY: <null>, VX: 12, VY: -1 }
     2) { IDX: D2, IDY: <null>, VX: 13, VY: -1 }
23) <null>
24) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: <null>, IDY: A0, VX: -1, VY: 0 }
     1) { IDX: <null>, IDY: A1, VX: -1, VY: 1 }
     2) { IDX: <null>, IDY: A3, VX: -1, VY: <null> }
     3) { IDX: <null>, IDY: A4, VX: -1, VY: 4 }
     4) { IDX: <null>, IDY: A6, VX: -1, VY: 6 }
     5) { IDX: <null>, IDY: A7, VX: -1, VY: 7 }
     6) { IDX: <null>, IDY: A9, VX: -1, VY: 9 }
     7) { IDX: <null>, IDY: A10, VX: -1, VY: <null> }
     8) { IDX: <null>, IDY: A12, VX: -1, VY: 12 }
     9) { IDX: <null>, IDY: A13, VX: -1, VY: 13 }
    10) { IDX: <null>, IDY: A15, VX: -1, VY: 15 }
    11) { IDX: <null>, IDY: A16, VX: -1, VY: 16 }
    12) { IDX: <null>, IDY: A18, VX: -1, VY: 18 }
    13) { IDX: <null>, IDY: A19, VX: -1, VY: 19 }
25) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: <null>, IDY: B0, VX: -1, VY: 0 }
     1) { IDX: <null>, IDY: B1, VX: -1, VY: 0 }
     2) { IDX: <null>, IDY: B4, VX: -1, VY: 2 }
     3) { IDX: <null>, IDY: B5, VX: -1, VY: 2 }
     4) { IDX: <null>, IDY: B6, VX: -1, VY: <null> }
     5) { IDX: <null>, IDY: B7, VX: -1, VY: <null> }
     6) { IDX: <null>, IDY: B8, VX: -1, VY: 4 }
     7) { IDX: <null>, IDY: B9, VX: -1, VY: 4 }
     8) { IDX: <null>, IDY: B12, VX: -1, VY: 6 }
     9) { IDX: <null>, IDY: B13, VX: -1, VY: 6 }
    10) { IDX: <null>, IDY: B14, VX: -1, VY: 7 }
    11) { IDX: <null>, IDY: B15, VX: -1, VY: 7 }
    12) { IDX: <null>, IDY: B16, VX: -1, VY: <null> }
    13) { IDX: <null>, IDY: B17, VX: -1, VY: <null> }
    14) { IDX: <null>, IDY: B20, VX: -1, VY: 10 }
    15) { IDX: <null>, IDY: B21, VX: -1, VY: 10 }
    16) { IDX: <null>, IDY: B22, VX: -1, VY: 11 }
    17) { IDX: <null>, IDY: B23, VX: -1, VY: 11 }
    18) { IDX: <null>, IDY: B24, VX: -1, VY: 12 }
    19) { IDX: <null>, IDY: B25, VX: -1, VY: 12 }
    20) { IDX: <null>, IDY: B28, VX: -1, VY: 14 }
    21) { IDX: <null>, IDY: B29, VX: -1, VY: 14 }
    22) { IDX: <null>, IDY: B30, VX: -1, VY: 15 }
    23) { IDX: <null>, IDY: B31, VX: -1, VY: 15 }
    24) { IDX: <null>, IDY: B32, VX: -1, VY: 16 }
    25) { IDX: <null>, IDY: B33, VX: -1, VY: 16 }
    26) { IDX: <null>, IDY: B36, VX: -1, VY: <null> }
    27) { IDX: <null>, IDY: B37, VX: -1, VY: <null> }
    28) { IDX: <null>, IDY: B38, VX: -1, VY: 19 }
    29) { IDX: <null>, IDY: B39, VX: -1, VY: 19 }
26) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: <null>, IDY: C0, VX: -1, VY: <null> }
     1) { IDX: <null>, IDY: C1, VX: -1, VY: <null> }
     2) { IDX: <null>, IDY: C2, VX: -1, VY: <null> }
27) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: <null>, IDY: D0, VX: -1, VY: 11 }
     1) { IDX: <null>, IDY: D1, VX: -1, VY: 12 }
     2) { IDX: <null>, IDY: D2, VX: -1, VY: 13 }
28) Sequence: Seq<{str,str,i8,i8}>
29) <null>
30) <null>
31) <null>
32) <null>
33) <null>
34) <null>
35) <null>
*** Ctx ping count: 157
    [0:3](108=0+0+108): KeyJoin(*3: *1x, *4: *2x, *3.V, *4.V, {IDX:*3.ID, IDY:*4.ID, VX:*3.V, VY:*4.V}, {IDX:*3.ID, VX:*3.V, VY:Opt<i8?>(-1)[, IDY:str(<null>)]}, {IDY:*4.ID, VX:Opt<i8?>(-1), VY:*4.V[, IDX:str(<null>)]})
    [3:5](49=7+42): CrossJoin(*1: XS, *2: YS, true, KeyJoin(*3: *1, *4: *2, *3.V, *4.V, {IDX:*3.ID, IDY:*4.ID, VX:*3.V, VY:*4.V}, {IDX:*3.ID, VX:*3.V, VY:Opt<i8?>(-1)[, IDY:str(<null>)]}, {IDY:*4.ID, VX:Opt<i8?>(-1), VY:*4.V[, IDX:str(<null>)]}))
###
> CrossJoin(X:XS, Y:YS, true,   KeyJoin(x:X, y:Y,        V,     V , { IDX:x.ID, IDY:y.ID, VX:x.V, VY:y.V }, { IDX:ID, VX:V, VY:-1 }, { IDY:ID, VX:-1, VY:V }))
CrossJoin(X : XS, Y : YS, true, KeyJoin(x : X, y : Y, V, V, { IDX : x.ID, IDY : y.ID, VX : x.V, VY : y.V }, { IDX : ID, VX : V, VY : -1 }, { IDY : ID, VX : -1, VY : V })) : {IDX:s, IDY:s, VX:i8?, VY:i8?}**
BndKind:Call, Type:{IDX:s, IDY:s, VX:i8?, VY:i8?}**, Bnd:(Call(∂.CrossJoin([map:1] Global(XS), [map:2] Global(YS), true:b, Call(∂.KeyJoin([map:3] Scope(1), [map:4] Scope(2), GetField(Scope(3), V), GetField(Scope(4), V), {IDX:GetField(Scope(3), ID), IDY:GetField(Scope(4), ID), VX:GetField(Scope(3), V), VY:GetField(Scope(4), V)}, {IDX:GetField(Scope(3), ID), VX:GetField(Scope(3), V), VY:Opt<i8?>(-1:i8)[, IDY:str(<null>)]}, {IDY:GetField(Scope(4), ID), VX:Opt<i8?>(-1:i8), VY:GetField(Scope(4), V)[, IDX:str(<null>)]})))))
// (<ctx>, ∂.XS:{ID:s, V:i8?}**, ∂.YS:{ID:s, V:i8?}**) : {IDX:s, IDY:s, VX:i8?, VY:i8?}**
CrossJoin_2(Arr<obj>, Seq<{str,i8}>, Seq<{str,i8}>):bool
      1) ldc.i4.1
      1) ret
  Total Size: 2

KeyJoin_2(Arr<obj>, {str,i8}):Opt<i8>
      1) ldarg.1 [{str,i8}]
      1) dup
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      5) ldfld {str,i8}::_F1:i8
      5) newobj Opt<i8>(i8)
      5) br [1]
  Label [0]:
      1) pop
      5) call static CodeGenUtil::GetDefault():Opt<i8>
  Label [1]:
      1) ret
  Total Size: 36

KeyJoin_3(Arr<obj>, {str,i8}):Opt<i8>
      1) ldarg.1 [{str,i8}]
      1) dup
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      5) ldfld {str,i8}::_F1:i8
      5) newobj Opt<i8>(i8)
      5) br [1]
  Label [0]:
      1) pop
      5) call static CodeGenUtil::GetDefault():Opt<i8>
  Label [1]:
      1) ret
  Total Size: 36

KeyJoin_4(Arr<obj>, {str,i8}, {str,i8}):{str,str,i8,i8}
      5) newobj {str,str,i8,i8}()
      1) dup
      1) ldc.i4.3
      5) stfld {str,str,i8,i8}::_B0:u1
      1) stloc.0 [{str,str,i8,i8}]
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F0:str
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F1:str
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.4
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F1:i8
      5) stfld {str,str,i8,i8}::_F2:i8
  Label [0]:
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [1]
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.8
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F1:i8
      5) stfld {str,str,i8,i8}::_F3:i8
  Label [1]:
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 130

KeyJoin_5(Arr<obj>, {str,i8}):{str,str,i8,i8}
      5) newobj {str,str,i8,i8}()
      1) dup
      1) ldc.i4.3
      5) stfld {str,str,i8,i8}::_B0:u1
      1) stloc.0 [{str,str,i8,i8}]
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F0:str
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.4
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F1:i8
      5) stfld {str,str,i8,i8}::_F2:i8
  Label [0]:
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldc.i4.m1
      1) conv.i8
      5) stfld {str,str,i8,i8}::_F3:i8
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.8
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 101

KeyJoin_6(Arr<obj>, {str,i8}):{str,str,i8,i8}
      5) newobj {str,str,i8,i8}()
      1) dup
      1) ldc.i4.3
      5) stfld {str,str,i8,i8}::_B0:u1
      1) stloc.0 [{str,str,i8,i8}]
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F1:str
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldc.i4.m1
      1) conv.i8
      5) stfld {str,str,i8,i8}::_F2:i8
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.4
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.8
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F1:i8
      5) stfld {str,str,i8,i8}::_F3:i8
  Label [0]:
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 101

CrossJoin_3(Arr<obj>, Seq<{str,i8}>, Seq<{str,i8}>):Seq<{str,str,i8,i8}>
      1) ldarg.1 [Seq<{str,i8}>]
      1) ldarg.2 [Seq<{str,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<{str,i8},Opt<i8>>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [Func<{str,i8},Opt<i8>>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Func<{str,i8},{str,i8},{str,str,i8,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.3
      5) ldelem [Func<{str,i8},{str,str,i8,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.4
      5) ldelem [Func<{str,i8},{str,str,i8,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.5
      5) ldelem [EqualityComparer<Opt<i8>>]
      1) ldc.i4.1
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [ExecCtx]
      1) ldc.i4.0
      5) call static KeyJoinGen::Exec(Seq<{str,i8}>, Seq<{str,i8}>, Func<{str,i8},Opt<i8>>, Func<{str,i8},Opt<i8>>, Func<{str,i8},{str,i8},{str,str,i8,i8}>, Func<{str,i8},{str,str,i8,i8}>, Func<{str,i8},{str,str,i8,i8}>, EqualityComparer<Opt<i8>>, bool, ExecCtx, i4):Seq<{str,str,i8,i8}>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<{str,str,i8,i8}>):Seq<{str,str,i8,i8}>
      1) ret
  Total Size: 100

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):ExecCtx
      1) stloc.0 [ExecCtx]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<Seq<{str,i8}>>
      1) stloc.1 [Seq<Seq<{str,i8}>>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.2
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<Seq<{str,i8}>>
      1) stloc.2 [Seq<Seq<{str,i8}>>]
      1) ldloc.1 [Seq<Seq<{str,i8}>>]
      1) ldloc.2 [Seq<Seq<{str,i8}>>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<Seq<{str,i8}>,Seq<{str,i8}>,bool>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [MethodInfo]
      5) ldtoken [Func<Seq<{str,i8}>,Seq<{str,i8}>,Seq<{str,str,i8,i8}>>]
      5) call static Type::GetTypeFromHandle(RuntimeTypeHandle):Type
      1) ldc.i4.2
      5) newarr [obj]
      1) dup
      1) ldc.i4.0
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Arr<obj>]
      5) stelem [Arr<obj>]
      1) dup
      1) ldc.i4.1
      1) ldloc.0 [ExecCtx]
      5) stelem [ExecCtx]
      5) callvirt DynamicMethod::CreateDelegate(Type, obj):Delegate
      1) ldloc.0 [ExecCtx]
      1) ldc.i4.3
      5) call static CrossJoinGen::Exec(Seq<Seq<{str,i8}>>, Seq<Seq<{str,i8}>>, Func<Seq<{str,i8}>,Seq<{str,i8}>,bool>, Func<Seq<{str,i8}>,Seq<{str,i8}>,Seq<{str,str,i8,i8}>>, ExecCtx, i4):Seq<Seq<{str,str,i8,i8}>>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<Seq<{str,str,i8,i8}>>):Seq<Seq<{str,str,i8,i8}>>
      1) ret
  Total Size: 99

Func sig: (<ctx>:x, XS:{ID:s, V:i8?}**, YS:{ID:s, V:i8?}**) to {IDX:s, IDY:s, VX:i8?, VY:i8?}**
Sequence: Seq<Seq<{str,str,i8,i8}>>
 0) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: A0, VX: 0, VY: 0 }
     1) { IDX: <null>, IDY: A3, VX: -1, VY: <null> }
     2) { IDX: <null>, IDY: A10, VX: -1, VY: <null> }
     3) { IDX: A1, IDY: A1, VX: 1, VY: 1 }
     4) { IDX: A3, IDY: <null>, VX: <null>, VY: -1 }
     5) { IDX: A4, IDY: A4, VX: 4, VY: 4 }
     6) { IDX: A6, IDY: A6, VX: 6, VY: 6 }
     7) { IDX: A7, IDY: A7, VX: 7, VY: 7 }
     8) { IDX: A9, IDY: A9, VX: 9, VY: 9 }
     9) { IDX: A10, IDY: <null>, VX: <null>, VY: -1 }
    10) { IDX: A12, IDY: A12, VX: 12, VY: 12 }
    11) { IDX: A13, IDY: A13, VX: 13, VY: 13 }
    12) { IDX: A15, IDY: A15, VX: 15, VY: 15 }
    13) { IDX: A16, IDY: A16, VX: 16, VY: 16 }
    14) { IDX: A18, IDY: A18, VX: 18, VY: 18 }
    15) { IDX: A19, IDY: A19, VX: 19, VY: 19 }
 1) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: B0, VX: 0, VY: 0 }
     1) { IDX: A0, IDY: B1, VX: 0, VY: 0 }
     2) { IDX: <null>, IDY: B6, VX: -1, VY: <null> }
     3) { IDX: <null>, IDY: B7, VX: -1, VY: <null> }
     4) { IDX: <null>, IDY: B16, VX: -1, VY: <null> }
     5) { IDX: <null>, IDY: B17, VX: -1, VY: <null> }
     6) { IDX: <null>, IDY: B36, VX: -1, VY: <null> }
     7) { IDX: <null>, IDY: B37, VX: -1, VY: <null> }
     8) { IDX: A1, IDY: <null>, VX: 1, VY: -1 }
     9) { IDX: A3, IDY: <null>, VX: <null>, VY: -1 }
    10) { IDX: A4, IDY: B8, VX: 4, VY: 4 }
    11) { IDX: A4, IDY: B9, VX: 4, VY: 4 }
    12) { IDX: A6, IDY: B12, VX: 6, VY: 6 }
    13) { IDX: A6, IDY: B13, VX: 6, VY: 6 }
    14) { IDX: A7, IDY: B14, VX: 7, VY: 7 }
    15) { IDX: A7, IDY: B15, VX: 7, VY: 7 }
    16) { IDX: A9, IDY: <null>, VX: 9, VY: -1 }
    17) { IDX: A10, IDY: <null>, VX: <null>, VY: -1 }
    18) { IDX: A12, IDY: B24, VX: 12, VY: 12 }
    19) { IDX: A12, IDY: B25, VX: 12, VY: 12 }
    20) { IDX: A13, IDY: <null>, VX: 13, VY: -1 }
    21) { IDX: A15, IDY: B30, VX: 15, VY: 15 }
    22) { IDX: A15, IDY: B31, VX: 15, VY: 15 }
    23) { IDX: A16, IDY: B32, VX: 16, VY: 16 }
    24) { IDX: A16, IDY: B33, VX: 16, VY: 16 }
    25) { IDX: A18, IDY: <null>, VX: 18, VY: -1 }
    26) { IDX: A19, IDY: B38, VX: 19, VY: 19 }
    27) { IDX: A19, IDY: B39, VX: 19, VY: 19 }
    28) { IDX: <null>, IDY: B4, VX: -1, VY: 2 }
    29) { IDX: <null>, IDY: B5, VX: -1, VY: 2 }
    30) { IDX: <null>, IDY: B20, VX: -1, VY: 10 }
    31) { IDX: <null>, IDY: B21, VX: -1, VY: 10 }
    32) { IDX: <null>, IDY: B22, VX: -1, VY: 11 }
    33) { IDX: <null>, IDY: B23, VX: -1, VY: 11 }
    34) { IDX: <null>, IDY: B28, VX: -1, VY: 14 }
    35) { IDX: <null>, IDY: B29, VX: -1, VY: 14 }
 2) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: <null>, IDY: C0, VX: -1, VY: <null> }
     1) { IDX: <null>, IDY: C1, VX: -1, VY: <null> }
     2) { IDX: <null>, IDY: C2, VX: -1, VY: <null> }
     3) { IDX: A0, IDY: <null>, VX: 0, VY: -1 }
     4) { IDX: A1, IDY: <null>, VX: 1, VY: -1 }
     5) { IDX: A3, IDY: <null>, VX: <null>, VY: -1 }
     6) { IDX: A4, IDY: <null>, VX: 4, VY: -1 }
     7) { IDX: A6, IDY: <null>, VX: 6, VY: -1 }
     8) { IDX: A7, IDY: <null>, VX: 7, VY: -1 }
     9) { IDX: A9, IDY: <null>, VX: 9, VY: -1 }
    10) { IDX: A10, IDY: <null>, VX: <null>, VY: -1 }
    11) { IDX: A12, IDY: <null>, VX: 12, VY: -1 }
    12) { IDX: A13, IDY: <null>, VX: 13, VY: -1 }
    13) { IDX: A15, IDY: <null>, VX: 15, VY: -1 }
    14) { IDX: A16, IDY: <null>, VX: 16, VY: -1 }
    15) { IDX: A18, IDY: <null>, VX: 18, VY: -1 }
    16) { IDX: A19, IDY: <null>, VX: 19, VY: -1 }
 3) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: A1, IDY: <null>, VX: 1, VY: -1 }
     2) { IDX: A3, IDY: <null>, VX: <null>, VY: -1 }
     3) { IDX: A4, IDY: <null>, VX: 4, VY: -1 }
     4) { IDX: A6, IDY: <null>, VX: 6, VY: -1 }
     5) { IDX: A7, IDY: <null>, VX: 7, VY: -1 }
     6) { IDX: A9, IDY: <null>, VX: 9, VY: -1 }
     7) { IDX: A10, IDY: <null>, VX: <null>, VY: -1 }
     8) { IDX: A12, IDY: D1, VX: 12, VY: 12 }
     9) { IDX: A13, IDY: D2, VX: 13, VY: 13 }
    10) { IDX: A15, IDY: <null>, VX: 15, VY: -1 }
    11) { IDX: A16, IDY: <null>, VX: 16, VY: -1 }
    12) { IDX: A18, IDY: <null>, VX: 18, VY: -1 }
    13) { IDX: A19, IDY: <null>, VX: 19, VY: -1 }
    14) { IDX: <null>, IDY: D0, VX: -1, VY: 11 }
 4) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: A1, IDY: <null>, VX: 1, VY: -1 }
     2) { IDX: A3, IDY: <null>, VX: <null>, VY: -1 }
     3) { IDX: A4, IDY: <null>, VX: 4, VY: -1 }
     4) { IDX: A6, IDY: <null>, VX: 6, VY: -1 }
     5) { IDX: A7, IDY: <null>, VX: 7, VY: -1 }
     6) { IDX: A9, IDY: <null>, VX: 9, VY: -1 }
     7) { IDX: A10, IDY: <null>, VX: <null>, VY: -1 }
     8) { IDX: A12, IDY: <null>, VX: 12, VY: -1 }
     9) { IDX: A13, IDY: <null>, VX: 13, VY: -1 }
    10) { IDX: A15, IDY: <null>, VX: 15, VY: -1 }
    11) { IDX: A16, IDY: <null>, VX: 16, VY: -1 }
    12) { IDX: A18, IDY: <null>, VX: 18, VY: -1 }
    13) { IDX: A19, IDY: <null>, VX: 19, VY: -1 }
 5) <null>
 6) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: A0, VX: 0, VY: 0 }
     1) { IDX: <null>, IDY: A3, VX: -1, VY: <null> }
     2) { IDX: <null>, IDY: A10, VX: -1, VY: <null> }
     3) { IDX: B1, IDY: A0, VX: 0, VY: 0 }
     4) { IDX: B4, IDY: <null>, VX: 2, VY: -1 }
     5) { IDX: B5, IDY: <null>, VX: 2, VY: -1 }
     6) { IDX: B6, IDY: <null>, VX: <null>, VY: -1 }
     7) { IDX: B7, IDY: <null>, VX: <null>, VY: -1 }
     8) { IDX: B8, IDY: A4, VX: 4, VY: 4 }
     9) { IDX: B9, IDY: A4, VX: 4, VY: 4 }
    10) { IDX: B12, IDY: A6, VX: 6, VY: 6 }
    11) { IDX: B13, IDY: A6, VX: 6, VY: 6 }
    12) { IDX: B14, IDY: A7, VX: 7, VY: 7 }
    13) { IDX: B15, IDY: A7, VX: 7, VY: 7 }
    14) { IDX: B16, IDY: <null>, VX: <null>, VY: -1 }
    15) { IDX: B17, IDY: <null>, VX: <null>, VY: -1 }
    16) { IDX: B20, IDY: <null>, VX: 10, VY: -1 }
    17) { IDX: B21, IDY: <null>, VX: 10, VY: -1 }
    18) { IDX: B22, IDY: <null>, VX: 11, VY: -1 }
    19) { IDX: B23, IDY: <null>, VX: 11, VY: -1 }
    20) { IDX: B24, IDY: A12, VX: 12, VY: 12 }
    21) { IDX: B25, IDY: A12, VX: 12, VY: 12 }
    22) { IDX: B28, IDY: <null>, VX: 14, VY: -1 }
    23) { IDX: B29, IDY: <null>, VX: 14, VY: -1 }
    24) { IDX: B30, IDY: A15, VX: 15, VY: 15 }
    25) { IDX: B31, IDY: A15, VX: 15, VY: 15 }
    26) { IDX: B32, IDY: A16, VX: 16, VY: 16 }
    27) { IDX: B33, IDY: A16, VX: 16, VY: 16 }
    28) { IDX: B36, IDY: <null>, VX: <null>, VY: -1 }
    29) { IDX: B37, IDY: <null>, VX: <null>, VY: -1 }
    30) { IDX: B38, IDY: A19, VX: 19, VY: 19 }
    31) { IDX: B39, IDY: A19, VX: 19, VY: 19 }
    32) { IDX: <null>, IDY: A1, VX: -1, VY: 1 }
    33) { IDX: <null>, IDY: A9, VX: -1, VY: 9 }
    34) { IDX: <null>, IDY: A13, VX: -1, VY: 13 }
    35) { IDX: <null>, IDY: A18, VX: -1, VY: 18 }
 7) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: B0, VX: 0, VY: 0 }
     1) { IDX: B0, IDY: B1, VX: 0, VY: 0 }
     2) { IDX: <null>, IDY: B6, VX: -1, VY: <null> }
     3) { IDX: <null>, IDY: B7, VX: -1, VY: <null> }
     4) { IDX: <null>, IDY: B16, VX: -1, VY: <null> }
     5) { IDX: <null>, IDY: B17, VX: -1, VY: <null> }
     6) { IDX: <null>, IDY: B36, VX: -1, VY: <null> }
     7) { IDX: <null>, IDY: B37, VX: -1, VY: <null> }
     8) { IDX: B1, IDY: B0, VX: 0, VY: 0 }
     9) { IDX: B1, IDY: B1, VX: 0, VY: 0 }
    10) { IDX: B4, IDY: B4, VX: 2, VY: 2 }
    11) { IDX: B4, IDY: B5, VX: 2, VY: 2 }
    12) { IDX: B5, IDY: B4, VX: 2, VY: 2 }
    13) { IDX: B5, IDY: B5, VX: 2, VY: 2 }
    14) { IDX: B6, IDY: <null>, VX: <null>, VY: -1 }
    15) { IDX: B7, IDY: <null>, VX: <null>, VY: -1 }
    16) { IDX: B8, IDY: B8, VX: 4, VY: 4 }
    17) { IDX: B8, IDY: B9, VX: 4, VY: 4 }
    18) { IDX: B9, IDY: B8, VX: 4, VY: 4 }
    19) { IDX: B9, IDY: B9, VX: 4, VY: 4 }
    20) { IDX: B12, IDY: B12, VX: 6, VY: 6 }
    21) { IDX: B12, IDY: B13, VX: 6, VY: 6 }
    22) { IDX: B13, IDY: B12, VX: 6, VY: 6 }
    23) { IDX: B13, IDY: B13, VX: 6, VY: 6 }
    24) { IDX: B14, IDY: B14, VX: 7, VY: 7 }
    25) { IDX: B14, IDY: B15, VX: 7, VY: 7 }
    26) { IDX: B15, IDY: B14, VX: 7, VY: 7 }
    27) { IDX: B15, IDY: B15, VX: 7, VY: 7 }
    28) { IDX: B16, IDY: <null>, VX: <null>, VY: -1 }
    29) { IDX: B17, IDY: <null>, VX: <null>, VY: -1 }
    30) { IDX: B20, IDY: B20, VX: 10, VY: 10 }
    31) { IDX: B20, IDY: B21, VX: 10, VY: 10 }
    32) { IDX: B21, IDY: B20, VX: 10, VY: 10 }
    33) { IDX: B21, IDY: B21, VX: 10, VY: 10 }
    34) { IDX: B22, IDY: B22, VX: 11, VY: 11 }
    35) { IDX: B22, IDY: B23, VX: 11, VY: 11 }
    36) { IDX: B23, IDY: B22, VX: 11, VY: 11 }
    37) { IDX: B23, IDY: B23, VX: 11, VY: 11 }
    38) { IDX: B24, IDY: B24, VX: 12, VY: 12 }
    39) { IDX: B24, IDY: B25, VX: 12, VY: 12 }
    40) { IDX: B25, IDY: B24, VX: 12, VY: 12 }
    41) { IDX: B25, IDY: B25, VX: 12, VY: 12 }
    42) { IDX: B28, IDY: B28, VX: 14, VY: 14 }
    43) { IDX: B28, IDY: B29, VX: 14, VY: 14 }
    44) { IDX: B29, IDY: B28, VX: 14, VY: 14 }
    45) { IDX: B29, IDY: B29, VX: 14, VY: 14 }
    46) { IDX: B30, IDY: B30, VX: 15, VY: 15 }
    47) { IDX: B30, IDY: B31, VX: 15, VY: 15 }
    48) { IDX: B31, IDY: B30, VX: 15, VY: 15 }
    49) { IDX: B31, IDY: B31, VX: 15, VY: 15 }
    50) { IDX: B32, IDY: B32, VX: 16, VY: 16 }
    51) { IDX: B32, IDY: B33, VX: 16, VY: 16 }
    52) { IDX: B33, IDY: B32, VX: 16, VY: 16 }
    53) { IDX: B33, IDY: B33, VX: 16, VY: 16 }
    54) { IDX: B36, IDY: <null>, VX: <null>, VY: -1 }
    55) { IDX: B37, IDY: <null>, VX: <null>, VY: -1 }
    56) { IDX: B38, IDY: B38, VX: 19, VY: 19 }
    57) { IDX: B38, IDY: B39, VX: 19, VY: 19 }
    58) { IDX: B39, IDY: B38, VX: 19, VY: 19 }
    59) { IDX: B39, IDY: B39, VX: 19, VY: 19 }
 8) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: <null>, IDY: C0, VX: -1, VY: <null> }
     1) { IDX: <null>, IDY: C1, VX: -1, VY: <null> }
     2) { IDX: <null>, IDY: C2, VX: -1, VY: <null> }
     3) { IDX: B0, IDY: <null>, VX: 0, VY: -1 }
     4) { IDX: B1, IDY: <null>, VX: 0, VY: -1 }
     5) { IDX: B4, IDY: <null>, VX: 2, VY: -1 }
     6) { IDX: B5, IDY: <null>, VX: 2, VY: -1 }
     7) { IDX: B6, IDY: <null>, VX: <null>, VY: -1 }
     8) { IDX: B7, IDY: <null>, VX: <null>, VY: -1 }
     9) { IDX: B8, IDY: <null>, VX: 4, VY: -1 }
    10) { IDX: B9, IDY: <null>, VX: 4, VY: -1 }
    11) { IDX: B12, IDY: <null>, VX: 6, VY: -1 }
    12) { IDX: B13, IDY: <null>, VX: 6, VY: -1 }
    13) { IDX: B14, IDY: <null>, VX: 7, VY: -1 }
    14) { IDX: B15, IDY: <null>, VX: 7, VY: -1 }
    15) { IDX: B16, IDY: <null>, VX: <null>, VY: -1 }
    16) { IDX: B17, IDY: <null>, VX: <null>, VY: -1 }
    17) { IDX: B20, IDY: <null>, VX: 10, VY: -1 }
    18) { IDX: B21, IDY: <null>, VX: 10, VY: -1 }
    19) { IDX: B22, IDY: <null>, VX: 11, VY: -1 }
    20) { IDX: B23, IDY: <null>, VX: 11, VY: -1 }
    21) { IDX: B24, IDY: <null>, VX: 12, VY: -1 }
    22) { IDX: B25, IDY: <null>, VX: 12, VY: -1 }
    23) { IDX: B28, IDY: <null>, VX: 14, VY: -1 }
    24) { IDX: B29, IDY: <null>, VX: 14, VY: -1 }
    25) { IDX: B30, IDY: <null>, VX: 15, VY: -1 }
    26) { IDX: B31, IDY: <null>, VX: 15, VY: -1 }
    27) { IDX: B32, IDY: <null>, VX: 16, VY: -1 }
    28) { IDX: B33, IDY: <null>, VX: 16, VY: -1 }
    29) { IDX: B36, IDY: <null>, VX: <null>, VY: -1 }
    30) { IDX: B37, IDY: <null>, VX: <null>, VY: -1 }
    31) { IDX: B38, IDY: <null>, VX: 19, VY: -1 }
    32) { IDX: B39, IDY: <null>, VX: 19, VY: -1 }
 9) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: B1, IDY: <null>, VX: 0, VY: -1 }
     2) { IDX: B4, IDY: <null>, VX: 2, VY: -1 }
     3) { IDX: B5, IDY: <null>, VX: 2, VY: -1 }
     4) { IDX: B6, IDY: <null>, VX: <null>, VY: -1 }
     5) { IDX: B7, IDY: <null>, VX: <null>, VY: -1 }
     6) { IDX: B8, IDY: <null>, VX: 4, VY: -1 }
     7) { IDX: B9, IDY: <null>, VX: 4, VY: -1 }
     8) { IDX: B12, IDY: <null>, VX: 6, VY: -1 }
     9) { IDX: B13, IDY: <null>, VX: 6, VY: -1 }
    10) { IDX: B14, IDY: <null>, VX: 7, VY: -1 }
    11) { IDX: B15, IDY: <null>, VX: 7, VY: -1 }
    12) { IDX: B16, IDY: <null>, VX: <null>, VY: -1 }
    13) { IDX: B17, IDY: <null>, VX: <null>, VY: -1 }
    14) { IDX: B20, IDY: <null>, VX: 10, VY: -1 }
    15) { IDX: B21, IDY: <null>, VX: 10, VY: -1 }
    16) { IDX: B22, IDY: D0, VX: 11, VY: 11 }
    17) { IDX: B23, IDY: D0, VX: 11, VY: 11 }
    18) { IDX: B24, IDY: D1, VX: 12, VY: 12 }
    19) { IDX: B25, IDY: D1, VX: 12, VY: 12 }
    20) { IDX: B28, IDY: <null>, VX: 14, VY: -1 }
    21) { IDX: B29, IDY: <null>, VX: 14, VY: -1 }
    22) { IDX: B30, IDY: <null>, VX: 15, VY: -1 }
    23) { IDX: B31, IDY: <null>, VX: 15, VY: -1 }
    24) { IDX: B32, IDY: <null>, VX: 16, VY: -1 }
    25) { IDX: B33, IDY: <null>, VX: 16, VY: -1 }
    26) { IDX: B36, IDY: <null>, VX: <null>, VY: -1 }
    27) { IDX: B37, IDY: <null>, VX: <null>, VY: -1 }
    28) { IDX: B38, IDY: <null>, VX: 19, VY: -1 }
    29) { IDX: B39, IDY: <null>, VX: 19, VY: -1 }
    30) { IDX: <null>, IDY: D2, VX: -1, VY: 13 }
10) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: B1, IDY: <null>, VX: 0, VY: -1 }
     2) { IDX: B4, IDY: <null>, VX: 2, VY: -1 }
     3) { IDX: B5, IDY: <null>, VX: 2, VY: -1 }
     4) { IDX: B6, IDY: <null>, VX: <null>, VY: -1 }
     5) { IDX: B7, IDY: <null>, VX: <null>, VY: -1 }
     6) { IDX: B8, IDY: <null>, VX: 4, VY: -1 }
     7) { IDX: B9, IDY: <null>, VX: 4, VY: -1 }
     8) { IDX: B12, IDY: <null>, VX: 6, VY: -1 }
     9) { IDX: B13, IDY: <null>, VX: 6, VY: -1 }
    10) { IDX: B14, IDY: <null>, VX: 7, VY: -1 }
    11) { IDX: B15, IDY: <null>, VX: 7, VY: -1 }
    12) { IDX: B16, IDY: <null>, VX: <null>, VY: -1 }
    13) { IDX: B17, IDY: <null>, VX: <null>, VY: -1 }
    14) { IDX: B20, IDY: <null>, VX: 10, VY: -1 }
    15) { IDX: B21, IDY: <null>, VX: 10, VY: -1 }
    16) { IDX: B22, IDY: <null>, VX: 11, VY: -1 }
    17) { IDX: B23, IDY: <null>, VX: 11, VY: -1 }
    18) { IDX: B24, IDY: <null>, VX: 12, VY: -1 }
    19) { IDX: B25, IDY: <null>, VX: 12, VY: -1 }
    20) { IDX: B28, IDY: <null>, VX: 14, VY: -1 }
    21) { IDX: B29, IDY: <null>, VX: 14, VY: -1 }
    22) { IDX: B30, IDY: <null>, VX: 15, VY: -1 }
    23) { IDX: B31, IDY: <null>, VX: 15, VY: -1 }
    24) { IDX: B32, IDY: <null>, VX: 16, VY: -1 }
    25) { IDX: B33, IDY: <null>, VX: 16, VY: -1 }
    26) { IDX: B36, IDY: <null>, VX: <null>, VY: -1 }
    27) { IDX: B37, IDY: <null>, VX: <null>, VY: -1 }
    28) { IDX: B38, IDY: <null>, VX: 19, VY: -1 }
    29) { IDX: B39, IDY: <null>, VX: 19, VY: -1 }
11) <null>
12) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: <null>, VX: <null>, VY: -1 }
     1) { IDX: C1, IDY: <null>, VX: <null>, VY: -1 }
     2) { IDX: C2, IDY: <null>, VX: <null>, VY: -1 }
     3) { IDX: <null>, IDY: A0, VX: -1, VY: 0 }
     4) { IDX: <null>, IDY: A1, VX: -1, VY: 1 }
     5) { IDX: <null>, IDY: A3, VX: -1, VY: <null> }
     6) { IDX: <null>, IDY: A4, VX: -1, VY: 4 }
     7) { IDX: <null>, IDY: A6, VX: -1, VY: 6 }
     8) { IDX: <null>, IDY: A7, VX: -1, VY: 7 }
     9) { IDX: <null>, IDY: A9, VX: -1, VY: 9 }
    10) { IDX: <null>, IDY: A10, VX: -1, VY: <null> }
    11) { IDX: <null>, IDY: A12, VX: -1, VY: 12 }
    12) { IDX: <null>, IDY: A13, VX: -1, VY: 13 }
    13) { IDX: <null>, IDY: A15, VX: -1, VY: 15 }
    14) { IDX: <null>, IDY: A16, VX: -1, VY: 16 }
    15) { IDX: <null>, IDY: A18, VX: -1, VY: 18 }
    16) { IDX: <null>, IDY: A19, VX: -1, VY: 19 }
13) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: <null>, VX: <null>, VY: -1 }
     1) { IDX: C1, IDY: <null>, VX: <null>, VY: -1 }
     2) { IDX: C2, IDY: <null>, VX: <null>, VY: -1 }
     3) { IDX: <null>, IDY: B0, VX: -1, VY: 0 }
     4) { IDX: <null>, IDY: B1, VX: -1, VY: 0 }
     5) { IDX: <null>, IDY: B4, VX: -1, VY: 2 }
     6) { IDX: <null>, IDY: B5, VX: -1, VY: 2 }
     7) { IDX: <null>, IDY: B6, VX: -1, VY: <null> }
     8) { IDX: <null>, IDY: B7, VX: -1, VY: <null> }
     9) { IDX: <null>, IDY: B8, VX: -1, VY: 4 }
    10) { IDX: <null>, IDY: B9, VX: -1, VY: 4 }
    11) { IDX: <null>, IDY: B12, VX: -1, VY: 6 }
    12) { IDX: <null>, IDY: B13, VX: -1, VY: 6 }
    13) { IDX: <null>, IDY: B14, VX: -1, VY: 7 }
    14) { IDX: <null>, IDY: B15, VX: -1, VY: 7 }
    15) { IDX: <null>, IDY: B16, VX: -1, VY: <null> }
    16) { IDX: <null>, IDY: B17, VX: -1, VY: <null> }
    17) { IDX: <null>, IDY: B20, VX: -1, VY: 10 }
    18) { IDX: <null>, IDY: B21, VX: -1, VY: 10 }
    19) { IDX: <null>, IDY: B22, VX: -1, VY: 11 }
    20) { IDX: <null>, IDY: B23, VX: -1, VY: 11 }
    21) { IDX: <null>, IDY: B24, VX: -1, VY: 12 }
    22) { IDX: <null>, IDY: B25, VX: -1, VY: 12 }
    23) { IDX: <null>, IDY: B28, VX: -1, VY: 14 }
    24) { IDX: <null>, IDY: B29, VX: -1, VY: 14 }
    25) { IDX: <null>, IDY: B30, VX: -1, VY: 15 }
    26) { IDX: <null>, IDY: B31, VX: -1, VY: 15 }
    27) { IDX: <null>, IDY: B32, VX: -1, VY: 16 }
    28) { IDX: <null>, IDY: B33, VX: -1, VY: 16 }
    29) { IDX: <null>, IDY: B36, VX: -1, VY: <null> }
    30) { IDX: <null>, IDY: B37, VX: -1, VY: <null> }
    31) { IDX: <null>, IDY: B38, VX: -1, VY: 19 }
    32) { IDX: <null>, IDY: B39, VX: -1, VY: 19 }
14) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: <null>, VX: <null>, VY: -1 }
     1) { IDX: C1, IDY: <null>, VX: <null>, VY: -1 }
     2) { IDX: C2, IDY: <null>, VX: <null>, VY: -1 }
     3) { IDX: <null>, IDY: C0, VX: -1, VY: <null> }
     4) { IDX: <null>, IDY: C1, VX: -1, VY: <null> }
     5) { IDX: <null>, IDY: C2, VX: -1, VY: <null> }
15) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: <null>, VX: <null>, VY: -1 }
     1) { IDX: C1, IDY: <null>, VX: <null>, VY: -1 }
     2) { IDX: C2, IDY: <null>, VX: <null>, VY: -1 }
     3) { IDX: <null>, IDY: D0, VX: -1, VY: 11 }
     4) { IDX: <null>, IDY: D1, VX: -1, VY: 12 }
     5) { IDX: <null>, IDY: D2, VX: -1, VY: 13 }
16) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: <null>, VX: <null>, VY: -1 }
     1) { IDX: C1, IDY: <null>, VX: <null>, VY: -1 }
     2) { IDX: C2, IDY: <null>, VX: <null>, VY: -1 }
17) <null>
18) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: <null>, IDY: A3, VX: -1, VY: <null> }
     1) { IDX: <null>, IDY: A10, VX: -1, VY: <null> }
     2) { IDX: D0, IDY: <null>, VX: 11, VY: -1 }
     3) { IDX: D1, IDY: A12, VX: 12, VY: 12 }
     4) { IDX: D2, IDY: A13, VX: 13, VY: 13 }
     5) { IDX: <null>, IDY: A0, VX: -1, VY: 0 }
     6) { IDX: <null>, IDY: A1, VX: -1, VY: 1 }
     7) { IDX: <null>, IDY: A4, VX: -1, VY: 4 }
     8) { IDX: <null>, IDY: A6, VX: -1, VY: 6 }
     9) { IDX: <null>, IDY: A7, VX: -1, VY: 7 }
    10) { IDX: <null>, IDY: A9, VX: -1, VY: 9 }
    11) { IDX: <null>, IDY: A15, VX: -1, VY: 15 }
    12) { IDX: <null>, IDY: A16, VX: -1, VY: 16 }
    13) { IDX: <null>, IDY: A18, VX: -1, VY: 18 }
    14) { IDX: <null>, IDY: A19, VX: -1, VY: 19 }
19) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: <null>, IDY: B6, VX: -1, VY: <null> }
     1) { IDX: <null>, IDY: B7, VX: -1, VY: <null> }
     2) { IDX: <null>, IDY: B16, VX: -1, VY: <null> }
     3) { IDX: <null>, IDY: B17, VX: -1, VY: <null> }
     4) { IDX: D0, IDY: B22, VX: 11, VY: 11 }
     5) { IDX: D0, IDY: B23, VX: 11, VY: 11 }
     6) { IDX: <null>, IDY: B36, VX: -1, VY: <null> }
     7) { IDX: <null>, IDY: B37, VX: -1, VY: <null> }
     8) { IDX: D1, IDY: B24, VX: 12, VY: 12 }
     9) { IDX: D1, IDY: B25, VX: 12, VY: 12 }
    10) { IDX: D2, IDY: <null>, VX: 13, VY: -1 }
    11) { IDX: <null>, IDY: B0, VX: -1, VY: 0 }
    12) { IDX: <null>, IDY: B1, VX: -1, VY: 0 }
    13) { IDX: <null>, IDY: B4, VX: -1, VY: 2 }
    14) { IDX: <null>, IDY: B5, VX: -1, VY: 2 }
    15) { IDX: <null>, IDY: B8, VX: -1, VY: 4 }
    16) { IDX: <null>, IDY: B9, VX: -1, VY: 4 }
    17) { IDX: <null>, IDY: B12, VX: -1, VY: 6 }
    18) { IDX: <null>, IDY: B13, VX: -1, VY: 6 }
    19) { IDX: <null>, IDY: B14, VX: -1, VY: 7 }
    20) { IDX: <null>, IDY: B15, VX: -1, VY: 7 }
    21) { IDX: <null>, IDY: B20, VX: -1, VY: 10 }
    22) { IDX: <null>, IDY: B21, VX: -1, VY: 10 }
    23) { IDX: <null>, IDY: B28, VX: -1, VY: 14 }
    24) { IDX: <null>, IDY: B29, VX: -1, VY: 14 }
    25) { IDX: <null>, IDY: B30, VX: -1, VY: 15 }
    26) { IDX: <null>, IDY: B31, VX: -1, VY: 15 }
    27) { IDX: <null>, IDY: B32, VX: -1, VY: 16 }
    28) { IDX: <null>, IDY: B33, VX: -1, VY: 16 }
    29) { IDX: <null>, IDY: B38, VX: -1, VY: 19 }
    30) { IDX: <null>, IDY: B39, VX: -1, VY: 19 }
20) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: <null>, IDY: C0, VX: -1, VY: <null> }
     1) { IDX: <null>, IDY: C1, VX: -1, VY: <null> }
     2) { IDX: <null>, IDY: C2, VX: -1, VY: <null> }
     3) { IDX: D0, IDY: <null>, VX: 11, VY: -1 }
     4) { IDX: D1, IDY: <null>, VX: 12, VY: -1 }
     5) { IDX: D2, IDY: <null>, VX: 13, VY: -1 }
21) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: D0, VX: 11, VY: 11 }
     1) { IDX: D1, IDY: D1, VX: 12, VY: 12 }
     2) { IDX: D2, IDY: D2, VX: 13, VY: 13 }
22) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: <null>, VX: 11, VY: -1 }
     1) { IDX: D1, IDY: <null>, VX: 12, VY: -1 }
     2) { IDX: D2, IDY: <null>, VX: 13, VY: -1 }
23) <null>
24) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: <null>, IDY: A0, VX: -1, VY: 0 }
     1) { IDX: <null>, IDY: A1, VX: -1, VY: 1 }
     2) { IDX: <null>, IDY: A3, VX: -1, VY: <null> }
     3) { IDX: <null>, IDY: A4, VX: -1, VY: 4 }
     4) { IDX: <null>, IDY: A6, VX: -1, VY: 6 }
     5) { IDX: <null>, IDY: A7, VX: -1, VY: 7 }
     6) { IDX: <null>, IDY: A9, VX: -1, VY: 9 }
     7) { IDX: <null>, IDY: A10, VX: -1, VY: <null> }
     8) { IDX: <null>, IDY: A12, VX: -1, VY: 12 }
     9) { IDX: <null>, IDY: A13, VX: -1, VY: 13 }
    10) { IDX: <null>, IDY: A15, VX: -1, VY: 15 }
    11) { IDX: <null>, IDY: A16, VX: -1, VY: 16 }
    12) { IDX: <null>, IDY: A18, VX: -1, VY: 18 }
    13) { IDX: <null>, IDY: A19, VX: -1, VY: 19 }
25) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: <null>, IDY: B0, VX: -1, VY: 0 }
     1) { IDX: <null>, IDY: B1, VX: -1, VY: 0 }
     2) { IDX: <null>, IDY: B4, VX: -1, VY: 2 }
     3) { IDX: <null>, IDY: B5, VX: -1, VY: 2 }
     4) { IDX: <null>, IDY: B6, VX: -1, VY: <null> }
     5) { IDX: <null>, IDY: B7, VX: -1, VY: <null> }
     6) { IDX: <null>, IDY: B8, VX: -1, VY: 4 }
     7) { IDX: <null>, IDY: B9, VX: -1, VY: 4 }
     8) { IDX: <null>, IDY: B12, VX: -1, VY: 6 }
     9) { IDX: <null>, IDY: B13, VX: -1, VY: 6 }
    10) { IDX: <null>, IDY: B14, VX: -1, VY: 7 }
    11) { IDX: <null>, IDY: B15, VX: -1, VY: 7 }
    12) { IDX: <null>, IDY: B16, VX: -1, VY: <null> }
    13) { IDX: <null>, IDY: B17, VX: -1, VY: <null> }
    14) { IDX: <null>, IDY: B20, VX: -1, VY: 10 }
    15) { IDX: <null>, IDY: B21, VX: -1, VY: 10 }
    16) { IDX: <null>, IDY: B22, VX: -1, VY: 11 }
    17) { IDX: <null>, IDY: B23, VX: -1, VY: 11 }
    18) { IDX: <null>, IDY: B24, VX: -1, VY: 12 }
    19) { IDX: <null>, IDY: B25, VX: -1, VY: 12 }
    20) { IDX: <null>, IDY: B28, VX: -1, VY: 14 }
    21) { IDX: <null>, IDY: B29, VX: -1, VY: 14 }
    22) { IDX: <null>, IDY: B30, VX: -1, VY: 15 }
    23) { IDX: <null>, IDY: B31, VX: -1, VY: 15 }
    24) { IDX: <null>, IDY: B32, VX: -1, VY: 16 }
    25) { IDX: <null>, IDY: B33, VX: -1, VY: 16 }
    26) { IDX: <null>, IDY: B36, VX: -1, VY: <null> }
    27) { IDX: <null>, IDY: B37, VX: -1, VY: <null> }
    28) { IDX: <null>, IDY: B38, VX: -1, VY: 19 }
    29) { IDX: <null>, IDY: B39, VX: -1, VY: 19 }
26) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: <null>, IDY: C0, VX: -1, VY: <null> }
     1) { IDX: <null>, IDY: C1, VX: -1, VY: <null> }
     2) { IDX: <null>, IDY: C2, VX: -1, VY: <null> }
27) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: <null>, IDY: D0, VX: -1, VY: 11 }
     1) { IDX: <null>, IDY: D1, VX: -1, VY: 12 }
     2) { IDX: <null>, IDY: D2, VX: -1, VY: 13 }
28) Sequence: Seq<{str,str,i8,i8}>
29) <null>
30) <null>
31) <null>
32) <null>
33) <null>
34) <null>
35) <null>
*** Ctx ping count: 157
    [0:3](108=0+0+108): KeyJoin(*3: *1x, *4: *2x, *3.V, *4.V, {IDX:*3.ID, IDY:*4.ID, VX:*3.V, VY:*4.V}, {IDX:*3.ID, VX:*3.V, VY:Opt<i8?>(-1)[, IDY:str(<null>)]}, {IDY:*4.ID, VX:Opt<i8?>(-1), VY:*4.V[, IDX:str(<null>)]})
    [3:5](49=7+42): CrossJoin(*1: XS, *2: YS, true, KeyJoin(*3: *1, *4: *2, *3.V, *4.V, {IDX:*3.ID, IDY:*4.ID, VX:*3.V, VY:*4.V}, {IDX:*3.ID, VX:*3.V, VY:Opt<i8?>(-1)[, IDY:str(<null>)]}, {IDY:*4.ID, VX:Opt<i8?>(-1), VY:*4.V[, IDX:str(<null>)]}))
###
> CrossJoin(X:XS, Y:YS, true,   KeyJoin(x:X, y:Y,     (V,),  (V,) , { IDX:x.ID, IDY:y.ID, VX:x.V, VY:y.V }, { IDX:ID, VX:V, VY:-1 }, { IDY:ID, VX:-1, VY:V }))
CrossJoin(X : XS, Y : YS, true, KeyJoin(x : X, y : Y, (V,), (V,), { IDX : x.ID, IDY : y.ID, VX : x.V, VY : y.V }, { IDX : ID, VX : V, VY : -1 }, { IDY : ID, VX : -1, VY : V })) : {IDX:s, IDY:s, VX:i8?, VY:i8?}**
BndKind:Call, Type:{IDX:s, IDY:s, VX:i8?, VY:i8?}**, Bnd:(Call(∂.CrossJoin([map:1] Global(XS), [map:2] Global(YS), true:b, Call(∂.KeyJoin([map:3] Scope(1), [map:4] Scope(2), (GetField(Scope(3), V),):(i8?), (GetField(Scope(4), V),):(i8?), {IDX:GetField(Scope(3), ID), IDY:GetField(Scope(4), ID), VX:GetField(Scope(3), V), VY:GetField(Scope(4), V)}, {IDX:GetField(Scope(3), ID), VX:GetField(Scope(3), V), VY:Opt<i8?>(-1:i8)[, IDY:str(<null>)]}, {IDY:GetField(Scope(4), ID), VX:Opt<i8?>(-1:i8), VY:GetField(Scope(4), V)[, IDX:str(<null>)]})))))
// (<ctx>, ∂.XS:{ID:s, V:i8?}**, ∂.YS:{ID:s, V:i8?}**) : {IDX:s, IDY:s, VX:i8?, VY:i8?}**
CrossJoin_2(Arr<obj>, Seq<{str,i8}>, Seq<{str,i8}>):bool
      1) ldc.i4.1
      1) ret
  Total Size: 2

KeyJoin_2(Arr<obj>, {str,i8}):(Opt<i8>)
      5) newobj (Opt<i8>)()
      1) dup
      1) ldarg.1 [{str,i8}]
      1) dup
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      5) ldfld {str,i8}::_F1:i8
      5) newobj Opt<i8>(i8)
      5) br [1]
  Label [0]:
      1) pop
      5) call static CodeGenUtil::GetDefault():Opt<i8>
  Label [1]:
      5) stfld (Opt<i8>)::_F0:Opt<i8>
      1) ret
  Total Size: 47

KeyJoin_3(Arr<obj>, {str,i8}):(Opt<i8>)
      5) newobj (Opt<i8>)()
      1) dup
      1) ldarg.1 [{str,i8}]
      1) dup
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      5) ldfld {str,i8}::_F1:i8
      5) newobj Opt<i8>(i8)
      5) br [1]
  Label [0]:
      1) pop
      5) call static CodeGenUtil::GetDefault():Opt<i8>
  Label [1]:
      5) stfld (Opt<i8>)::_F0:Opt<i8>
      1) ret
  Total Size: 47

KeyJoin_4(Arr<obj>, {str,i8}, {str,i8}):{str,str,i8,i8}
      5) newobj {str,str,i8,i8}()
      1) dup
      1) ldc.i4.3
      5) stfld {str,str,i8,i8}::_B0:u1
      1) stloc.0 [{str,str,i8,i8}]
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F0:str
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F1:str
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.4
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F1:i8
      5) stfld {str,str,i8,i8}::_F2:i8
  Label [0]:
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [1]
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.8
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F1:i8
      5) stfld {str,str,i8,i8}::_F3:i8
  Label [1]:
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 130

KeyJoin_5(Arr<obj>, {str,i8}):{str,str,i8,i8}
      5) newobj {str,str,i8,i8}()
      1) dup
      1) ldc.i4.3
      5) stfld {str,str,i8,i8}::_B0:u1
      1) stloc.0 [{str,str,i8,i8}]
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F0:str
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.4
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F1:i8
      5) stfld {str,str,i8,i8}::_F2:i8
  Label [0]:
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldc.i4.m1
      1) conv.i8
      5) stfld {str,str,i8,i8}::_F3:i8
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.8
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 101

KeyJoin_6(Arr<obj>, {str,i8}):{str,str,i8,i8}
      5) newobj {str,str,i8,i8}()
      1) dup
      1) ldc.i4.3
      5) stfld {str,str,i8,i8}::_B0:u1
      1) stloc.0 [{str,str,i8,i8}]
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F1:str
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldc.i4.m1
      1) conv.i8
      5) stfld {str,str,i8,i8}::_F2:i8
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.4
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.8
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldarg.1 [{str,i8}]
      5) ldfld {str,i8}::_F1:i8
      5) stfld {str,str,i8,i8}::_F3:i8
  Label [0]:
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 101

CrossJoin_3(Arr<obj>, Seq<{str,i8}>, Seq<{str,i8}>):Seq<{str,str,i8,i8}>
      1) ldarg.1 [Seq<{str,i8}>]
      1) ldarg.2 [Seq<{str,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<{str,i8},(Opt<i8>)>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [Func<{str,i8},(Opt<i8>)>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Func<{str,i8},{str,i8},{str,str,i8,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.3
      5) ldelem [Func<{str,i8},{str,str,i8,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.4
      5) ldelem [Func<{str,i8},{str,str,i8,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.5
      5) ldelem [EqualityComparer<(Opt<i8>)>]
      1) ldc.i4.1
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [ExecCtx]
      1) ldc.i4.0
      5) call static KeyJoinGen::Exec(Seq<{str,i8}>, Seq<{str,i8}>, Func<{str,i8},(Opt<i8>)>, Func<{str,i8},(Opt<i8>)>, Func<{str,i8},{str,i8},{str,str,i8,i8}>, Func<{str,i8},{str,str,i8,i8}>, Func<{str,i8},{str,str,i8,i8}>, EqualityComparer<(Opt<i8>)>, bool, ExecCtx, i4):Seq<{str,str,i8,i8}>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<{str,str,i8,i8}>):Seq<{str,str,i8,i8}>
      1) ret
  Total Size: 100

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):ExecCtx
      1) stloc.0 [ExecCtx]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<Seq<{str,i8}>>
      1) stloc.1 [Seq<Seq<{str,i8}>>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.2
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<Seq<{str,i8}>>
      1) stloc.2 [Seq<Seq<{str,i8}>>]
      1) ldloc.1 [Seq<Seq<{str,i8}>>]
      1) ldloc.2 [Seq<Seq<{str,i8}>>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<Seq<{str,i8}>,Seq<{str,i8}>,bool>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [MethodInfo]
      5) ldtoken [Func<Seq<{str,i8}>,Seq<{str,i8}>,Seq<{str,str,i8,i8}>>]
      5) call static Type::GetTypeFromHandle(RuntimeTypeHandle):Type
      1) ldc.i4.2
      5) newarr [obj]
      1) dup
      1) ldc.i4.0
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Arr<obj>]
      5) stelem [Arr<obj>]
      1) dup
      1) ldc.i4.1
      1) ldloc.0 [ExecCtx]
      5) stelem [ExecCtx]
      5) callvirt DynamicMethod::CreateDelegate(Type, obj):Delegate
      1) ldloc.0 [ExecCtx]
      1) ldc.i4.3
      5) call static CrossJoinGen::Exec(Seq<Seq<{str,i8}>>, Seq<Seq<{str,i8}>>, Func<Seq<{str,i8}>,Seq<{str,i8}>,bool>, Func<Seq<{str,i8}>,Seq<{str,i8}>,Seq<{str,str,i8,i8}>>, ExecCtx, i4):Seq<Seq<{str,str,i8,i8}>>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<Seq<{str,str,i8,i8}>>):Seq<Seq<{str,str,i8,i8}>>
      1) ret
  Total Size: 99

Func sig: (<ctx>:x, XS:{ID:s, V:i8?}**, YS:{ID:s, V:i8?}**) to {IDX:s, IDY:s, VX:i8?, VY:i8?}**
Sequence: Seq<Seq<{str,str,i8,i8}>>
 0) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: A0, VX: 0, VY: 0 }
     1) { IDX: <null>, IDY: A3, VX: -1, VY: <null> }
     2) { IDX: <null>, IDY: A10, VX: -1, VY: <null> }
     3) { IDX: A1, IDY: A1, VX: 1, VY: 1 }
     4) { IDX: A3, IDY: <null>, VX: <null>, VY: -1 }
     5) { IDX: A4, IDY: A4, VX: 4, VY: 4 }
     6) { IDX: A6, IDY: A6, VX: 6, VY: 6 }
     7) { IDX: A7, IDY: A7, VX: 7, VY: 7 }
     8) { IDX: A9, IDY: A9, VX: 9, VY: 9 }
     9) { IDX: A10, IDY: <null>, VX: <null>, VY: -1 }
    10) { IDX: A12, IDY: A12, VX: 12, VY: 12 }
    11) { IDX: A13, IDY: A13, VX: 13, VY: 13 }
    12) { IDX: A15, IDY: A15, VX: 15, VY: 15 }
    13) { IDX: A16, IDY: A16, VX: 16, VY: 16 }
    14) { IDX: A18, IDY: A18, VX: 18, VY: 18 }
    15) { IDX: A19, IDY: A19, VX: 19, VY: 19 }
 1) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: B0, VX: 0, VY: 0 }
     1) { IDX: A0, IDY: B1, VX: 0, VY: 0 }
     2) { IDX: <null>, IDY: B6, VX: -1, VY: <null> }
     3) { IDX: <null>, IDY: B7, VX: -1, VY: <null> }
     4) { IDX: <null>, IDY: B16, VX: -1, VY: <null> }
     5) { IDX: <null>, IDY: B17, VX: -1, VY: <null> }
     6) { IDX: <null>, IDY: B36, VX: -1, VY: <null> }
     7) { IDX: <null>, IDY: B37, VX: -1, VY: <null> }
     8) { IDX: A1, IDY: <null>, VX: 1, VY: -1 }
     9) { IDX: A3, IDY: <null>, VX: <null>, VY: -1 }
    10) { IDX: A4, IDY: B8, VX: 4, VY: 4 }
    11) { IDX: A4, IDY: B9, VX: 4, VY: 4 }
    12) { IDX: A6, IDY: B12, VX: 6, VY: 6 }
    13) { IDX: A6, IDY: B13, VX: 6, VY: 6 }
    14) { IDX: A7, IDY: B14, VX: 7, VY: 7 }
    15) { IDX: A7, IDY: B15, VX: 7, VY: 7 }
    16) { IDX: A9, IDY: <null>, VX: 9, VY: -1 }
    17) { IDX: A10, IDY: <null>, VX: <null>, VY: -1 }
    18) { IDX: A12, IDY: B24, VX: 12, VY: 12 }
    19) { IDX: A12, IDY: B25, VX: 12, VY: 12 }
    20) { IDX: A13, IDY: <null>, VX: 13, VY: -1 }
    21) { IDX: A15, IDY: B30, VX: 15, VY: 15 }
    22) { IDX: A15, IDY: B31, VX: 15, VY: 15 }
    23) { IDX: A16, IDY: B32, VX: 16, VY: 16 }
    24) { IDX: A16, IDY: B33, VX: 16, VY: 16 }
    25) { IDX: A18, IDY: <null>, VX: 18, VY: -1 }
    26) { IDX: A19, IDY: B38, VX: 19, VY: 19 }
    27) { IDX: A19, IDY: B39, VX: 19, VY: 19 }
    28) { IDX: <null>, IDY: B4, VX: -1, VY: 2 }
    29) { IDX: <null>, IDY: B5, VX: -1, VY: 2 }
    30) { IDX: <null>, IDY: B20, VX: -1, VY: 10 }
    31) { IDX: <null>, IDY: B21, VX: -1, VY: 10 }
    32) { IDX: <null>, IDY: B22, VX: -1, VY: 11 }
    33) { IDX: <null>, IDY: B23, VX: -1, VY: 11 }
    34) { IDX: <null>, IDY: B28, VX: -1, VY: 14 }
    35) { IDX: <null>, IDY: B29, VX: -1, VY: 14 }
 2) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: <null>, IDY: C0, VX: -1, VY: <null> }
     1) { IDX: <null>, IDY: C1, VX: -1, VY: <null> }
     2) { IDX: <null>, IDY: C2, VX: -1, VY: <null> }
     3) { IDX: A0, IDY: <null>, VX: 0, VY: -1 }
     4) { IDX: A1, IDY: <null>, VX: 1, VY: -1 }
     5) { IDX: A3, IDY: <null>, VX: <null>, VY: -1 }
     6) { IDX: A4, IDY: <null>, VX: 4, VY: -1 }
     7) { IDX: A6, IDY: <null>, VX: 6, VY: -1 }
     8) { IDX: A7, IDY: <null>, VX: 7, VY: -1 }
     9) { IDX: A9, IDY: <null>, VX: 9, VY: -1 }
    10) { IDX: A10, IDY: <null>, VX: <null>, VY: -1 }
    11) { IDX: A12, IDY: <null>, VX: 12, VY: -1 }
    12) { IDX: A13, IDY: <null>, VX: 13, VY: -1 }
    13) { IDX: A15, IDY: <null>, VX: 15, VY: -1 }
    14) { IDX: A16, IDY: <null>, VX: 16, VY: -1 }
    15) { IDX: A18, IDY: <null>, VX: 18, VY: -1 }
    16) { IDX: A19, IDY: <null>, VX: 19, VY: -1 }
 3) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: A1, IDY: <null>, VX: 1, VY: -1 }
     2) { IDX: A3, IDY: <null>, VX: <null>, VY: -1 }
     3) { IDX: A4, IDY: <null>, VX: 4, VY: -1 }
     4) { IDX: A6, IDY: <null>, VX: 6, VY: -1 }
     5) { IDX: A7, IDY: <null>, VX: 7, VY: -1 }
     6) { IDX: A9, IDY: <null>, VX: 9, VY: -1 }
     7) { IDX: A10, IDY: <null>, VX: <null>, VY: -1 }
     8) { IDX: A12, IDY: D1, VX: 12, VY: 12 }
     9) { IDX: A13, IDY: D2, VX: 13, VY: 13 }
    10) { IDX: A15, IDY: <null>, VX: 15, VY: -1 }
    11) { IDX: A16, IDY: <null>, VX: 16, VY: -1 }
    12) { IDX: A18, IDY: <null>, VX: 18, VY: -1 }
    13) { IDX: A19, IDY: <null>, VX: 19, VY: -1 }
    14) { IDX: <null>, IDY: D0, VX: -1, VY: 11 }
 4) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: A0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: A1, IDY: <null>, VX: 1, VY: -1 }
     2) { IDX: A3, IDY: <null>, VX: <null>, VY: -1 }
     3) { IDX: A4, IDY: <null>, VX: 4, VY: -1 }
     4) { IDX: A6, IDY: <null>, VX: 6, VY: -1 }
     5) { IDX: A7, IDY: <null>, VX: 7, VY: -1 }
     6) { IDX: A9, IDY: <null>, VX: 9, VY: -1 }
     7) { IDX: A10, IDY: <null>, VX: <null>, VY: -1 }
     8) { IDX: A12, IDY: <null>, VX: 12, VY: -1 }
     9) { IDX: A13, IDY: <null>, VX: 13, VY: -1 }
    10) { IDX: A15, IDY: <null>, VX: 15, VY: -1 }
    11) { IDX: A16, IDY: <null>, VX: 16, VY: -1 }
    12) { IDX: A18, IDY: <null>, VX: 18, VY: -1 }
    13) { IDX: A19, IDY: <null>, VX: 19, VY: -1 }
 5) <null>
 6) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: A0, VX: 0, VY: 0 }
     1) { IDX: <null>, IDY: A3, VX: -1, VY: <null> }
     2) { IDX: <null>, IDY: A10, VX: -1, VY: <null> }
     3) { IDX: B1, IDY: A0, VX: 0, VY: 0 }
     4) { IDX: B4, IDY: <null>, VX: 2, VY: -1 }
     5) { IDX: B5, IDY: <null>, VX: 2, VY: -1 }
     6) { IDX: B6, IDY: <null>, VX: <null>, VY: -1 }
     7) { IDX: B7, IDY: <null>, VX: <null>, VY: -1 }
     8) { IDX: B8, IDY: A4, VX: 4, VY: 4 }
     9) { IDX: B9, IDY: A4, VX: 4, VY: 4 }
    10) { IDX: B12, IDY: A6, VX: 6, VY: 6 }
    11) { IDX: B13, IDY: A6, VX: 6, VY: 6 }
    12) { IDX: B14, IDY: A7, VX: 7, VY: 7 }
    13) { IDX: B15, IDY: A7, VX: 7, VY: 7 }
    14) { IDX: B16, IDY: <null>, VX: <null>, VY: -1 }
    15) { IDX: B17, IDY: <null>, VX: <null>, VY: -1 }
    16) { IDX: B20, IDY: <null>, VX: 10, VY: -1 }
    17) { IDX: B21, IDY: <null>, VX: 10, VY: -1 }
    18) { IDX: B22, IDY: <null>, VX: 11, VY: -1 }
    19) { IDX: B23, IDY: <null>, VX: 11, VY: -1 }
    20) { IDX: B24, IDY: A12, VX: 12, VY: 12 }
    21) { IDX: B25, IDY: A12, VX: 12, VY: 12 }
    22) { IDX: B28, IDY: <null>, VX: 14, VY: -1 }
    23) { IDX: B29, IDY: <null>, VX: 14, VY: -1 }
    24) { IDX: B30, IDY: A15, VX: 15, VY: 15 }
    25) { IDX: B31, IDY: A15, VX: 15, VY: 15 }
    26) { IDX: B32, IDY: A16, VX: 16, VY: 16 }
    27) { IDX: B33, IDY: A16, VX: 16, VY: 16 }
    28) { IDX: B36, IDY: <null>, VX: <null>, VY: -1 }
    29) { IDX: B37, IDY: <null>, VX: <null>, VY: -1 }
    30) { IDX: B38, IDY: A19, VX: 19, VY: 19 }
    31) { IDX: B39, IDY: A19, VX: 19, VY: 19 }
    32) { IDX: <null>, IDY: A1, VX: -1, VY: 1 }
    33) { IDX: <null>, IDY: A9, VX: -1, VY: 9 }
    34) { IDX: <null>, IDY: A13, VX: -1, VY: 13 }
    35) { IDX: <null>, IDY: A18, VX: -1, VY: 18 }
 7) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: B0, VX: 0, VY: 0 }
     1) { IDX: B0, IDY: B1, VX: 0, VY: 0 }
     2) { IDX: <null>, IDY: B6, VX: -1, VY: <null> }
     3) { IDX: <null>, IDY: B7, VX: -1, VY: <null> }
     4) { IDX: <null>, IDY: B16, VX: -1, VY: <null> }
     5) { IDX: <null>, IDY: B17, VX: -1, VY: <null> }
     6) { IDX: <null>, IDY: B36, VX: -1, VY: <null> }
     7) { IDX: <null>, IDY: B37, VX: -1, VY: <null> }
     8) { IDX: B1, IDY: B0, VX: 0, VY: 0 }
     9) { IDX: B1, IDY: B1, VX: 0, VY: 0 }
    10) { IDX: B4, IDY: B4, VX: 2, VY: 2 }
    11) { IDX: B4, IDY: B5, VX: 2, VY: 2 }
    12) { IDX: B5, IDY: B4, VX: 2, VY: 2 }
    13) { IDX: B5, IDY: B5, VX: 2, VY: 2 }
    14) { IDX: B6, IDY: <null>, VX: <null>, VY: -1 }
    15) { IDX: B7, IDY: <null>, VX: <null>, VY: -1 }
    16) { IDX: B8, IDY: B8, VX: 4, VY: 4 }
    17) { IDX: B8, IDY: B9, VX: 4, VY: 4 }
    18) { IDX: B9, IDY: B8, VX: 4, VY: 4 }
    19) { IDX: B9, IDY: B9, VX: 4, VY: 4 }
    20) { IDX: B12, IDY: B12, VX: 6, VY: 6 }
    21) { IDX: B12, IDY: B13, VX: 6, VY: 6 }
    22) { IDX: B13, IDY: B12, VX: 6, VY: 6 }
    23) { IDX: B13, IDY: B13, VX: 6, VY: 6 }
    24) { IDX: B14, IDY: B14, VX: 7, VY: 7 }
    25) { IDX: B14, IDY: B15, VX: 7, VY: 7 }
    26) { IDX: B15, IDY: B14, VX: 7, VY: 7 }
    27) { IDX: B15, IDY: B15, VX: 7, VY: 7 }
    28) { IDX: B16, IDY: <null>, VX: <null>, VY: -1 }
    29) { IDX: B17, IDY: <null>, VX: <null>, VY: -1 }
    30) { IDX: B20, IDY: B20, VX: 10, VY: 10 }
    31) { IDX: B20, IDY: B21, VX: 10, VY: 10 }
    32) { IDX: B21, IDY: B20, VX: 10, VY: 10 }
    33) { IDX: B21, IDY: B21, VX: 10, VY: 10 }
    34) { IDX: B22, IDY: B22, VX: 11, VY: 11 }
    35) { IDX: B22, IDY: B23, VX: 11, VY: 11 }
    36) { IDX: B23, IDY: B22, VX: 11, VY: 11 }
    37) { IDX: B23, IDY: B23, VX: 11, VY: 11 }
    38) { IDX: B24, IDY: B24, VX: 12, VY: 12 }
    39) { IDX: B24, IDY: B25, VX: 12, VY: 12 }
    40) { IDX: B25, IDY: B24, VX: 12, VY: 12 }
    41) { IDX: B25, IDY: B25, VX: 12, VY: 12 }
    42) { IDX: B28, IDY: B28, VX: 14, VY: 14 }
    43) { IDX: B28, IDY: B29, VX: 14, VY: 14 }
    44) { IDX: B29, IDY: B28, VX: 14, VY: 14 }
    45) { IDX: B29, IDY: B29, VX: 14, VY: 14 }
    46) { IDX: B30, IDY: B30, VX: 15, VY: 15 }
    47) { IDX: B30, IDY: B31, VX: 15, VY: 15 }
    48) { IDX: B31, IDY: B30, VX: 15, VY: 15 }
    49) { IDX: B31, IDY: B31, VX: 15, VY: 15 }
    50) { IDX: B32, IDY: B32, VX: 16, VY: 16 }
    51) { IDX: B32, IDY: B33, VX: 16, VY: 16 }
    52) { IDX: B33, IDY: B32, VX: 16, VY: 16 }
    53) { IDX: B33, IDY: B33, VX: 16, VY: 16 }
    54) { IDX: B36, IDY: <null>, VX: <null>, VY: -1 }
    55) { IDX: B37, IDY: <null>, VX: <null>, VY: -1 }
    56) { IDX: B38, IDY: B38, VX: 19, VY: 19 }
    57) { IDX: B38, IDY: B39, VX: 19, VY: 19 }
    58) { IDX: B39, IDY: B38, VX: 19, VY: 19 }
    59) { IDX: B39, IDY: B39, VX: 19, VY: 19 }
 8) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: <null>, IDY: C0, VX: -1, VY: <null> }
     1) { IDX: <null>, IDY: C1, VX: -1, VY: <null> }
     2) { IDX: <null>, IDY: C2, VX: -1, VY: <null> }
     3) { IDX: B0, IDY: <null>, VX: 0, VY: -1 }
     4) { IDX: B1, IDY: <null>, VX: 0, VY: -1 }
     5) { IDX: B4, IDY: <null>, VX: 2, VY: -1 }
     6) { IDX: B5, IDY: <null>, VX: 2, VY: -1 }
     7) { IDX: B6, IDY: <null>, VX: <null>, VY: -1 }
     8) { IDX: B7, IDY: <null>, VX: <null>, VY: -1 }
     9) { IDX: B8, IDY: <null>, VX: 4, VY: -1 }
    10) { IDX: B9, IDY: <null>, VX: 4, VY: -1 }
    11) { IDX: B12, IDY: <null>, VX: 6, VY: -1 }
    12) { IDX: B13, IDY: <null>, VX: 6, VY: -1 }
    13) { IDX: B14, IDY: <null>, VX: 7, VY: -1 }
    14) { IDX: B15, IDY: <null>, VX: 7, VY: -1 }
    15) { IDX: B16, IDY: <null>, VX: <null>, VY: -1 }
    16) { IDX: B17, IDY: <null>, VX: <null>, VY: -1 }
    17) { IDX: B20, IDY: <null>, VX: 10, VY: -1 }
    18) { IDX: B21, IDY: <null>, VX: 10, VY: -1 }
    19) { IDX: B22, IDY: <null>, VX: 11, VY: -1 }
    20) { IDX: B23, IDY: <null>, VX: 11, VY: -1 }
    21) { IDX: B24, IDY: <null>, VX: 12, VY: -1 }
    22) { IDX: B25, IDY: <null>, VX: 12, VY: -1 }
    23) { IDX: B28, IDY: <null>, VX: 14, VY: -1 }
    24) { IDX: B29, IDY: <null>, VX: 14, VY: -1 }
    25) { IDX: B30, IDY: <null>, VX: 15, VY: -1 }
    26) { IDX: B31, IDY: <null>, VX: 15, VY: -1 }
    27) { IDX: B32, IDY: <null>, VX: 16, VY: -1 }
    28) { IDX: B33, IDY: <null>, VX: 16, VY: -1 }
    29) { IDX: B36, IDY: <null>, VX: <null>, VY: -1 }
    30) { IDX: B37, IDY: <null>, VX: <null>, VY: -1 }
    31) { IDX: B38, IDY: <null>, VX: 19, VY: -1 }
    32) { IDX: B39, IDY: <null>, VX: 19, VY: -1 }
 9) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: B1, IDY: <null>, VX: 0, VY: -1 }
     2) { IDX: B4, IDY: <null>, VX: 2, VY: -1 }
     3) { IDX: B5, IDY: <null>, VX: 2, VY: -1 }
     4) { IDX: B6, IDY: <null>, VX: <null>, VY: -1 }
     5) { IDX: B7, IDY: <null>, VX: <null>, VY: -1 }
     6) { IDX: B8, IDY: <null>, VX: 4, VY: -1 }
     7) { IDX: B9, IDY: <null>, VX: 4, VY: -1 }
     8) { IDX: B12, IDY: <null>, VX: 6, VY: -1 }
     9) { IDX: B13, IDY: <null>, VX: 6, VY: -1 }
    10) { IDX: B14, IDY: <null>, VX: 7, VY: -1 }
    11) { IDX: B15, IDY: <null>, VX: 7, VY: -1 }
    12) { IDX: B16, IDY: <null>, VX: <null>, VY: -1 }
    13) { IDX: B17, IDY: <null>, VX: <null>, VY: -1 }
    14) { IDX: B20, IDY: <null>, VX: 10, VY: -1 }
    15) { IDX: B21, IDY: <null>, VX: 10, VY: -1 }
    16) { IDX: B22, IDY: D0, VX: 11, VY: 11 }
    17) { IDX: B23, IDY: D0, VX: 11, VY: 11 }
    18) { IDX: B24, IDY: D1, VX: 12, VY: 12 }
    19) { IDX: B25, IDY: D1, VX: 12, VY: 12 }
    20) { IDX: B28, IDY: <null>, VX: 14, VY: -1 }
    21) { IDX: B29, IDY: <null>, VX: 14, VY: -1 }
    22) { IDX: B30, IDY: <null>, VX: 15, VY: -1 }
    23) { IDX: B31, IDY: <null>, VX: 15, VY: -1 }
    24) { IDX: B32, IDY: <null>, VX: 16, VY: -1 }
    25) { IDX: B33, IDY: <null>, VX: 16, VY: -1 }
    26) { IDX: B36, IDY: <null>, VX: <null>, VY: -1 }
    27) { IDX: B37, IDY: <null>, VX: <null>, VY: -1 }
    28) { IDX: B38, IDY: <null>, VX: 19, VY: -1 }
    29) { IDX: B39, IDY: <null>, VX: 19, VY: -1 }
    30) { IDX: <null>, IDY: D2, VX: -1, VY: 13 }
10) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: B0, IDY: <null>, VX: 0, VY: -1 }
     1) { IDX: B1, IDY: <null>, VX: 0, VY: -1 }
     2) { IDX: B4, IDY: <null>, VX: 2, VY: -1 }
     3) { IDX: B5, IDY: <null>, VX: 2, VY: -1 }
     4) { IDX: B6, IDY: <null>, VX: <null>, VY: -1 }
     5) { IDX: B7, IDY: <null>, VX: <null>, VY: -1 }
     6) { IDX: B8, IDY: <null>, VX: 4, VY: -1 }
     7) { IDX: B9, IDY: <null>, VX: 4, VY: -1 }
     8) { IDX: B12, IDY: <null>, VX: 6, VY: -1 }
     9) { IDX: B13, IDY: <null>, VX: 6, VY: -1 }
    10) { IDX: B14, IDY: <null>, VX: 7, VY: -1 }
    11) { IDX: B15, IDY: <null>, VX: 7, VY: -1 }
    12) { IDX: B16, IDY: <null>, VX: <null>, VY: -1 }
    13) { IDX: B17, IDY: <null>, VX: <null>, VY: -1 }
    14) { IDX: B20, IDY: <null>, VX: 10, VY: -1 }
    15) { IDX: B21, IDY: <null>, VX: 10, VY: -1 }
    16) { IDX: B22, IDY: <null>, VX: 11, VY: -1 }
    17) { IDX: B23, IDY: <null>, VX: 11, VY: -1 }
    18) { IDX: B24, IDY: <null>, VX: 12, VY: -1 }
    19) { IDX: B25, IDY: <null>, VX: 12, VY: -1 }
    20) { IDX: B28, IDY: <null>, VX: 14, VY: -1 }
    21) { IDX: B29, IDY: <null>, VX: 14, VY: -1 }
    22) { IDX: B30, IDY: <null>, VX: 15, VY: -1 }
    23) { IDX: B31, IDY: <null>, VX: 15, VY: -1 }
    24) { IDX: B32, IDY: <null>, VX: 16, VY: -1 }
    25) { IDX: B33, IDY: <null>, VX: 16, VY: -1 }
    26) { IDX: B36, IDY: <null>, VX: <null>, VY: -1 }
    27) { IDX: B37, IDY: <null>, VX: <null>, VY: -1 }
    28) { IDX: B38, IDY: <null>, VX: 19, VY: -1 }
    29) { IDX: B39, IDY: <null>, VX: 19, VY: -1 }
11) <null>
12) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: <null>, VX: <null>, VY: -1 }
     1) { IDX: C1, IDY: <null>, VX: <null>, VY: -1 }
     2) { IDX: C2, IDY: <null>, VX: <null>, VY: -1 }
     3) { IDX: <null>, IDY: A0, VX: -1, VY: 0 }
     4) { IDX: <null>, IDY: A1, VX: -1, VY: 1 }
     5) { IDX: <null>, IDY: A3, VX: -1, VY: <null> }
     6) { IDX: <null>, IDY: A4, VX: -1, VY: 4 }
     7) { IDX: <null>, IDY: A6, VX: -1, VY: 6 }
     8) { IDX: <null>, IDY: A7, VX: -1, VY: 7 }
     9) { IDX: <null>, IDY: A9, VX: -1, VY: 9 }
    10) { IDX: <null>, IDY: A10, VX: -1, VY: <null> }
    11) { IDX: <null>, IDY: A12, VX: -1, VY: 12 }
    12) { IDX: <null>, IDY: A13, VX: -1, VY: 13 }
    13) { IDX: <null>, IDY: A15, VX: -1, VY: 15 }
    14) { IDX: <null>, IDY: A16, VX: -1, VY: 16 }
    15) { IDX: <null>, IDY: A18, VX: -1, VY: 18 }
    16) { IDX: <null>, IDY: A19, VX: -1, VY: 19 }
13) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: <null>, VX: <null>, VY: -1 }
     1) { IDX: C1, IDY: <null>, VX: <null>, VY: -1 }
     2) { IDX: C2, IDY: <null>, VX: <null>, VY: -1 }
     3) { IDX: <null>, IDY: B0, VX: -1, VY: 0 }
     4) { IDX: <null>, IDY: B1, VX: -1, VY: 0 }
     5) { IDX: <null>, IDY: B4, VX: -1, VY: 2 }
     6) { IDX: <null>, IDY: B5, VX: -1, VY: 2 }
     7) { IDX: <null>, IDY: B6, VX: -1, VY: <null> }
     8) { IDX: <null>, IDY: B7, VX: -1, VY: <null> }
     9) { IDX: <null>, IDY: B8, VX: -1, VY: 4 }
    10) { IDX: <null>, IDY: B9, VX: -1, VY: 4 }
    11) { IDX: <null>, IDY: B12, VX: -1, VY: 6 }
    12) { IDX: <null>, IDY: B13, VX: -1, VY: 6 }
    13) { IDX: <null>, IDY: B14, VX: -1, VY: 7 }
    14) { IDX: <null>, IDY: B15, VX: -1, VY: 7 }
    15) { IDX: <null>, IDY: B16, VX: -1, VY: <null> }
    16) { IDX: <null>, IDY: B17, VX: -1, VY: <null> }
    17) { IDX: <null>, IDY: B20, VX: -1, VY: 10 }
    18) { IDX: <null>, IDY: B21, VX: -1, VY: 10 }
    19) { IDX: <null>, IDY: B22, VX: -1, VY: 11 }
    20) { IDX: <null>, IDY: B23, VX: -1, VY: 11 }
    21) { IDX: <null>, IDY: B24, VX: -1, VY: 12 }
    22) { IDX: <null>, IDY: B25, VX: -1, VY: 12 }
    23) { IDX: <null>, IDY: B28, VX: -1, VY: 14 }
    24) { IDX: <null>, IDY: B29, VX: -1, VY: 14 }
    25) { IDX: <null>, IDY: B30, VX: -1, VY: 15 }
    26) { IDX: <null>, IDY: B31, VX: -1, VY: 15 }
    27) { IDX: <null>, IDY: B32, VX: -1, VY: 16 }
    28) { IDX: <null>, IDY: B33, VX: -1, VY: 16 }
    29) { IDX: <null>, IDY: B36, VX: -1, VY: <null> }
    30) { IDX: <null>, IDY: B37, VX: -1, VY: <null> }
    31) { IDX: <null>, IDY: B38, VX: -1, VY: 19 }
    32) { IDX: <null>, IDY: B39, VX: -1, VY: 19 }
14) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: <null>, VX: <null>, VY: -1 }
     1) { IDX: C1, IDY: <null>, VX: <null>, VY: -1 }
     2) { IDX: C2, IDY: <null>, VX: <null>, VY: -1 }
     3) { IDX: <null>, IDY: C0, VX: -1, VY: <null> }
     4) { IDX: <null>, IDY: C1, VX: -1, VY: <null> }
     5) { IDX: <null>, IDY: C2, VX: -1, VY: <null> }
15) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: <null>, VX: <null>, VY: -1 }
     1) { IDX: C1, IDY: <null>, VX: <null>, VY: -1 }
     2) { IDX: C2, IDY: <null>, VX: <null>, VY: -1 }
     3) { IDX: <null>, IDY: D0, VX: -1, VY: 11 }
     4) { IDX: <null>, IDY: D1, VX: -1, VY: 12 }
     5) { IDX: <null>, IDY: D2, VX: -1, VY: 13 }
16) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: C0, IDY: <null>, VX: <null>, VY: -1 }
     1) { IDX: C1, IDY: <null>, VX: <null>, VY: -1 }
     2) { IDX: C2, IDY: <null>, VX: <null>, VY: -1 }
17) <null>
18) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: <null>, IDY: A3, VX: -1, VY: <null> }
     1) { IDX: <null>, IDY: A10, VX: -1, VY: <null> }
     2) { IDX: D0, IDY: <null>, VX: 11, VY: -1 }
     3) { IDX: D1, IDY: A12, VX: 12, VY: 12 }
     4) { IDX: D2, IDY: A13, VX: 13, VY: 13 }
     5) { IDX: <null>, IDY: A0, VX: -1, VY: 0 }
     6) { IDX: <null>, IDY: A1, VX: -1, VY: 1 }
     7) { IDX: <null>, IDY: A4, VX: -1, VY: 4 }
     8) { IDX: <null>, IDY: A6, VX: -1, VY: 6 }
     9) { IDX: <null>, IDY: A7, VX: -1, VY: 7 }
    10) { IDX: <null>, IDY: A9, VX: -1, VY: 9 }
    11) { IDX: <null>, IDY: A15, VX: -1, VY: 15 }
    12) { IDX: <null>, IDY: A16, VX: -1, VY: 16 }
    13) { IDX: <null>, IDY: A18, VX: -1, VY: 18 }
    14) { IDX: <null>, IDY: A19, VX: -1, VY: 19 }
19) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: <null>, IDY: B6, VX: -1, VY: <null> }
     1) { IDX: <null>, IDY: B7, VX: -1, VY: <null> }
     2) { IDX: <null>, IDY: B16, VX: -1, VY: <null> }
     3) { IDX: <null>, IDY: B17, VX: -1, VY: <null> }
     4) { IDX: D0, IDY: B22, VX: 11, VY: 11 }
     5) { IDX: D0, IDY: B23, VX: 11, VY: 11 }
     6) { IDX: <null>, IDY: B36, VX: -1, VY: <null> }
     7) { IDX: <null>, IDY: B37, VX: -1, VY: <null> }
     8) { IDX: D1, IDY: B24, VX: 12, VY: 12 }
     9) { IDX: D1, IDY: B25, VX: 12, VY: 12 }
    10) { IDX: D2, IDY: <null>, VX: 13, VY: -1 }
    11) { IDX: <null>, IDY: B0, VX: -1, VY: 0 }
    12) { IDX: <null>, IDY: B1, VX: -1, VY: 0 }
    13) { IDX: <null>, IDY: B4, VX: -1, VY: 2 }
    14) { IDX: <null>, IDY: B5, VX: -1, VY: 2 }
    15) { IDX: <null>, IDY: B8, VX: -1, VY: 4 }
    16) { IDX: <null>, IDY: B9, VX: -1, VY: 4 }
    17) { IDX: <null>, IDY: B12, VX: -1, VY: 6 }
    18) { IDX: <null>, IDY: B13, VX: -1, VY: 6 }
    19) { IDX: <null>, IDY: B14, VX: -1, VY: 7 }
    20) { IDX: <null>, IDY: B15, VX: -1, VY: 7 }
    21) { IDX: <null>, IDY: B20, VX: -1, VY: 10 }
    22) { IDX: <null>, IDY: B21, VX: -1, VY: 10 }
    23) { IDX: <null>, IDY: B28, VX: -1, VY: 14 }
    24) { IDX: <null>, IDY: B29, VX: -1, VY: 14 }
    25) { IDX: <null>, IDY: B30, VX: -1, VY: 15 }
    26) { IDX: <null>, IDY: B31, VX: -1, VY: 15 }
    27) { IDX: <null>, IDY: B32, VX: -1, VY: 16 }
    28) { IDX: <null>, IDY: B33, VX: -1, VY: 16 }
    29) { IDX: <null>, IDY: B38, VX: -1, VY: 19 }
    30) { IDX: <null>, IDY: B39, VX: -1, VY: 19 }
20) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: <null>, IDY: C0, VX: -1, VY: <null> }
     1) { IDX: <null>, IDY: C1, VX: -1, VY: <null> }
     2) { IDX: <null>, IDY: C2, VX: -1, VY: <null> }
     3) { IDX: D0, IDY: <null>, VX: 11, VY: -1 }
     4) { IDX: D1, IDY: <null>, VX: 12, VY: -1 }
     5) { IDX: D2, IDY: <null>, VX: 13, VY: -1 }
21) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: D0, VX: 11, VY: 11 }
     1) { IDX: D1, IDY: D1, VX: 12, VY: 12 }
     2) { IDX: D2, IDY: D2, VX: 13, VY: 13 }
22) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: D0, IDY: <null>, VX: 11, VY: -1 }
     1) { IDX: D1, IDY: <null>, VX: 12, VY: -1 }
     2) { IDX: D2, IDY: <null>, VX: 13, VY: -1 }
23) <null>
24) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: <null>, IDY: A0, VX: -1, VY: 0 }
     1) { IDX: <null>, IDY: A1, VX: -1, VY: 1 }
     2) { IDX: <null>, IDY: A3, VX: -1, VY: <null> }
     3) { IDX: <null>, IDY: A4, VX: -1, VY: 4 }
     4) { IDX: <null>, IDY: A6, VX: -1, VY: 6 }
     5) { IDX: <null>, IDY: A7, VX: -1, VY: 7 }
     6) { IDX: <null>, IDY: A9, VX: -1, VY: 9 }
     7) { IDX: <null>, IDY: A10, VX: -1, VY: <null> }
     8) { IDX: <null>, IDY: A12, VX: -1, VY: 12 }
     9) { IDX: <null>, IDY: A13, VX: -1, VY: 13 }
    10) { IDX: <null>, IDY: A15, VX: -1, VY: 15 }
    11) { IDX: <null>, IDY: A16, VX: -1, VY: 16 }
    12) { IDX: <null>, IDY: A18, VX: -1, VY: 18 }
    13) { IDX: <null>, IDY: A19, VX: -1, VY: 19 }
25) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: <null>, IDY: B0, VX: -1, VY: 0 }
     1) { IDX: <null>, IDY: B1, VX: -1, VY: 0 }
     2) { IDX: <null>, IDY: B4, VX: -1, VY: 2 }
     3) { IDX: <null>, IDY: B5, VX: -1, VY: 2 }
     4) { IDX: <null>, IDY: B6, VX: -1, VY: <null> }
     5) { IDX: <null>, IDY: B7, VX: -1, VY: <null> }
     6) { IDX: <null>, IDY: B8, VX: -1, VY: 4 }
     7) { IDX: <null>, IDY: B9, VX: -1, VY: 4 }
     8) { IDX: <null>, IDY: B12, VX: -1, VY: 6 }
     9) { IDX: <null>, IDY: B13, VX: -1, VY: 6 }
    10) { IDX: <null>, IDY: B14, VX: -1, VY: 7 }
    11) { IDX: <null>, IDY: B15, VX: -1, VY: 7 }
    12) { IDX: <null>, IDY: B16, VX: -1, VY: <null> }
    13) { IDX: <null>, IDY: B17, VX: -1, VY: <null> }
    14) { IDX: <null>, IDY: B20, VX: -1, VY: 10 }
    15) { IDX: <null>, IDY: B21, VX: -1, VY: 10 }
    16) { IDX: <null>, IDY: B22, VX: -1, VY: 11 }
    17) { IDX: <null>, IDY: B23, VX: -1, VY: 11 }
    18) { IDX: <null>, IDY: B24, VX: -1, VY: 12 }
    19) { IDX: <null>, IDY: B25, VX: -1, VY: 12 }
    20) { IDX: <null>, IDY: B28, VX: -1, VY: 14 }
    21) { IDX: <null>, IDY: B29, VX: -1, VY: 14 }
    22) { IDX: <null>, IDY: B30, VX: -1, VY: 15 }
    23) { IDX: <null>, IDY: B31, VX: -1, VY: 15 }
    24) { IDX: <null>, IDY: B32, VX: -1, VY: 16 }
    25) { IDX: <null>, IDY: B33, VX: -1, VY: 16 }
    26) { IDX: <null>, IDY: B36, VX: -1, VY: <null> }
    27) { IDX: <null>, IDY: B37, VX: -1, VY: <null> }
    28) { IDX: <null>, IDY: B38, VX: -1, VY: 19 }
    29) { IDX: <null>, IDY: B39, VX: -1, VY: 19 }
26) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: <null>, IDY: C0, VX: -1, VY: <null> }
     1) { IDX: <null>, IDY: C1, VX: -1, VY: <null> }
     2) { IDX: <null>, IDY: C2, VX: -1, VY: <null> }
27) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: <null>, IDY: D0, VX: -1, VY: 11 }
     1) { IDX: <null>, IDY: D1, VX: -1, VY: 12 }
     2) { IDX: <null>, IDY: D2, VX: -1, VY: 13 }
28) Sequence: Seq<{str,str,i8,i8}>
29) <null>
30) <null>
31) <null>
32) <null>
33) <null>
34) <null>
35) <null>
*** Ctx ping count: 157
    [0:3](108=0+0+108): KeyJoin(*3: *1x, *4: *2x, (*3.V,), (*4.V,), {IDX:*3.ID, IDY:*4.ID, VX:*3.V, VY:*4.V}, {IDX:*3.ID, VX:*3.V, VY:Opt<i8?>(-1)[, IDY:str(<null>)]}, {IDY:*4.ID, VX:Opt<i8?>(-1), VY:*4.V[, IDX:str(<null>)]})
    [3:5](49=7+42): CrossJoin(*1: XS, *2: YS, true, KeyJoin(*3: *1, *4: *2, (*3.V,), (*4.V,), {IDX:*3.ID, IDY:*4.ID, VX:*3.V, VY:*4.V}, {IDX:*3.ID, VX:*3.V, VY:Opt<i8?>(-1)[, IDY:str(<null>)]}, {IDY:*4.ID, VX:Opt<i8?>(-1), VY:*4.V[, IDX:str(<null>)]}))
###

**** New definitions: Ai, type: {ID:s, V:i8?}*
**** New definitions: Bi, type: {ID:s, V:i8?}*
**** New definitions: Ci, type: {ID:s, V:i8?}*
**** New definitions: Di, type: {ID:s, V:i8?}*
**** New definitions: XSi, type: {ID:s, V:i8?}**
**** New definitions: YSi, type: {ID:s, V:i8?}**

> Ai
Ai : {ID:s, V:i8?}*
BndKind:Global, Type:{ID:s, V:i8?}*, Bnd:(Global(Ai))
// (∂.Ai:{ID:s, V:i8?}*) : {ID:s, V:i8?}*
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{str,i8}>
      1) stloc.0 [Seq<{str,i8}>]
      1) ldloc.0 [Seq<{str,i8}>]
      1) ret
  Total Size: 11

Func sig: (Ai:{ID:s, V:i8?}*) to {ID:s, V:i8?}*
Sequence: Seq<{str,i8}>
 0) { ID: 0_#0, V: 0 }
 1) { ID: 1_#1, V: 1 }
 2) { ID: _#2, V: <null> }
 3) { ID: 4_#3, V: 4 }
 4) { ID: 6_#4, V: 6 }
 5) { ID: 7_#5, V: 7 }
 6) { ID: 9_#6, V: 9 }
 7) { ID: _#7, V: <null> }
 8) { ID: 12_#8, V: 12 }
 9) { ID: 13_#9, V: 13 }
10) { ID: 15_#10, V: 15 }
11) { ID: 16_#11, V: 16 }
12) { ID: 18_#12, V: 18 }
13) { ID: 19_#13, V: 19 }
###
> Bi
Bi : {ID:s, V:i8?}*
BndKind:Global, Type:{ID:s, V:i8?}*, Bnd:(Global(Bi))
// (∂.Bi:{ID:s, V:i8?}*) : {ID:s, V:i8?}*
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{str,i8}>
      1) stloc.0 [Seq<{str,i8}>]
      1) ldloc.0 [Seq<{str,i8}>]
      1) ret
  Total Size: 11

Func sig: (Bi:{ID:s, V:i8?}*) to {ID:s, V:i8?}*
Sequence: Seq<{str,i8}>
 0) { ID: 0_#0, V: 0 }
 1) { ID: 0_#1, V: 0 }
 2) { ID: 2_#2, V: 2 }
 3) { ID: 2_#3, V: 2 }
 4) { ID: _#4, V: <null> }
 5) { ID: _#5, V: <null> }
 6) { ID: 4_#6, V: 4 }
 7) { ID: 4_#7, V: 4 }
 8) { ID: 6_#8, V: 6 }
 9) { ID: 6_#9, V: 6 }
10) { ID: 7_#10, V: 7 }
11) { ID: 7_#11, V: 7 }
12) { ID: _#12, V: <null> }
13) { ID: _#13, V: <null> }
14) { ID: 10_#14, V: 10 }
15) { ID: 10_#15, V: 10 }
16) { ID: 11_#16, V: 11 }
17) { ID: 11_#17, V: 11 }
18) { ID: 12_#18, V: 12 }
19) { ID: 12_#19, V: 12 }
20) { ID: 14_#20, V: 14 }
21) { ID: 14_#21, V: 14 }
22) { ID: 15_#22, V: 15 }
23) { ID: 15_#23, V: 15 }
24) { ID: 16_#24, V: 16 }
25) { ID: 16_#25, V: 16 }
26) { ID: _#26, V: <null> }
27) { ID: _#27, V: <null> }
28) { ID: 19_#28, V: 19 }
29) { ID: 19_#29, V: 19 }
###
> Ci
Ci : {ID:s, V:i8?}*
BndKind:Global, Type:{ID:s, V:i8?}*, Bnd:(Global(Ci))
// (∂.Ci:{ID:s, V:i8?}*) : {ID:s, V:i8?}*
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{str,i8}>
      1) stloc.0 [Seq<{str,i8}>]
      1) ldloc.0 [Seq<{str,i8}>]
      1) ret
  Total Size: 11

Func sig: (Ci:{ID:s, V:i8?}*) to {ID:s, V:i8?}*
Sequence: Seq<{str,i8}>
 0) { ID: _#0, V: <null> }
 1) { ID: _#1, V: <null> }
 2) { ID: _#2, V: <null> }
###
> Di
Di : {ID:s, V:i8?}*
BndKind:Global, Type:{ID:s, V:i8?}*, Bnd:(Global(Di))
// (∂.Di:{ID:s, V:i8?}*) : {ID:s, V:i8?}*
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{str,i8}>
      1) stloc.0 [Seq<{str,i8}>]
      1) ldloc.0 [Seq<{str,i8}>]
      1) ret
  Total Size: 11

Func sig: (Di:{ID:s, V:i8?}*) to {ID:s, V:i8?}*
Sequence: Seq<{str,i8}>
 0) { ID: 11_#0, V: 11 }
 1) { ID: 12_#1, V: 12 }
 2) { ID: 13_#2, V: 13 }
###
> CrossJoin(X:XSi, Y:YSi, true, CrossJoin(x:X, y:Y, Wrap(#x + 2 =  #y), { iX: #x, IDX:x.ID, iY: #y, IDY:y.ID }))
CrossJoin(X : XSi, Y : YSi, true, CrossJoin(x : X, y : Y, Wrap(#x + 2 @= #y), { iX : #x, IDX : x.ID, iY : #y, IDY : y.ID })) : {IDX:s, IDY:s, iX:i8, iY:i8}**
BndKind:Call, Type:{IDX:s, IDY:s, iX:i8, iY:i8}**, Bnd:(Call(∂.CrossJoin([map:1] Global(XSi), [map:2] Global(YSi), true:b, Call(∂.CrossJoin([map:4] Scope(1), [map:6] Scope(2), Call(∂.Test.Wrap(Cmp(Add(Scope(3), 2:i8) @= Scope(5))):b), {IDX:GetField(Scope(4), ID), IDY:GetField(Scope(6), ID), iX:Scope(3), iY:Scope(5)})))))
// (<ctx>, ∂.XSi:{ID:s, V:i8?}**, ∂.YSi:{ID:s, V:i8?}**) : {IDX:s, IDY:s, iX:i8, iY:i8}**
CrossJoin_2(Arr<obj>, Seq<{str,i8}>, Seq<{str,i8}>):bool
      1) ldc.i4.1
      1) ret
  Total Size: 2

CrossJoin_2(Arr<obj>, i8, {str,i8}, i8, {str,i8}):bool
      1) ldarg.1 [i8]
      1) ldc.i4.2
      1) conv.i8
      1) add
      1) ldarg.3 [i8]
      2) ceq
      5) call static WrapFuncGen::Exec(bool):bool
      1) ret
  Total Size: 13

CrossJoin_3(Arr<obj>, i8, {str,i8}, i8, {str,i8}):{str,str,i8,i8}
      5) newobj {str,str,i8,i8}()
      1) dup
      2) ldc.i4.s [15]
      5) stfld {str,str,i8,i8}::_B0:u1
      1) stloc.0 [{str,str,i8,i8}]
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F0:str
      1) ldloc.0 [{str,str,i8,i8}]
      2) ldarg.s [{str,i8} (4)]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F1:str
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.1 [i8]
      5) stfld {str,str,i8,i8}::_F2:i8
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.3 [i8]
      5) stfld {str,str,i8,i8}::_F3:i8
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 68

CrossJoin_3(Arr<obj>, Seq<{str,i8}>, Seq<{str,i8}>):Seq<{str,str,i8,i8}>
      1) ldarg.1 [Seq<{str,i8}>]
      1) ldarg.2 [Seq<{str,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<i8,{str,i8},i8,{str,i8},bool>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [Func<i8,{str,i8},i8,{str,i8},{str,str,i8,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [ExecCtx]
      1) ldc.i4.0
      5) call static CrossJoinGen::ExecInd(Seq<{str,i8}>, Seq<{str,i8}>, Func<i8,{str,i8},i8,{str,i8},bool>, Func<i8,{str,i8},i8,{str,i8},{str,str,i8,i8}>, ExecCtx, i4):Seq<{str,str,i8,i8}>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<{str,str,i8,i8}>):Seq<{str,str,i8,i8}>
      1) ret
  Total Size: 47

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):ExecCtx
      1) stloc.0 [ExecCtx]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<Seq<{str,i8}>>
      1) stloc.1 [Seq<Seq<{str,i8}>>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.2
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<Seq<{str,i8}>>
      1) stloc.2 [Seq<Seq<{str,i8}>>]
      1) ldloc.1 [Seq<Seq<{str,i8}>>]
      1) ldloc.2 [Seq<Seq<{str,i8}>>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<Seq<{str,i8}>,Seq<{str,i8}>,bool>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [MethodInfo]
      5) ldtoken [Func<Seq<{str,i8}>,Seq<{str,i8}>,Seq<{str,str,i8,i8}>>]
      5) call static Type::GetTypeFromHandle(RuntimeTypeHandle):Type
      1) ldc.i4.2
      5) newarr [obj]
      1) dup
      1) ldc.i4.0
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Arr<obj>]
      5) stelem [Arr<obj>]
      1) dup
      1) ldc.i4.1
      1) ldloc.0 [ExecCtx]
      5) stelem [ExecCtx]
      5) callvirt DynamicMethod::CreateDelegate(Type, obj):Delegate
      1) ldloc.0 [ExecCtx]
      1) ldc.i4.2
      5) call static CrossJoinGen::Exec(Seq<Seq<{str,i8}>>, Seq<Seq<{str,i8}>>, Func<Seq<{str,i8}>,Seq<{str,i8}>,bool>, Func<Seq<{str,i8}>,Seq<{str,i8}>,Seq<{str,str,i8,i8}>>, ExecCtx, i4):Seq<Seq<{str,str,i8,i8}>>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<Seq<{str,str,i8,i8}>>):Seq<Seq<{str,str,i8,i8}>>
      1) ret
  Total Size: 99

Func sig: (<ctx>:x, XSi:{ID:s, V:i8?}**, YSi:{ID:s, V:i8?}**) to {IDX:s, IDY:s, iX:i8, iY:i8}**
Sequence: Seq<Seq<{str,str,i8,i8}>>
 0) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: _#2, iX: 0, iY: 2 }
     1) { IDX: 1_#1, IDY: 4_#3, iX: 1, iY: 3 }
     2) { IDX: _#2, IDY: 6_#4, iX: 2, iY: 4 }
     3) { IDX: 4_#3, IDY: 7_#5, iX: 3, iY: 5 }
     4) { IDX: 6_#4, IDY: 9_#6, iX: 4, iY: 6 }
     5) { IDX: 7_#5, IDY: _#7, iX: 5, iY: 7 }
     6) { IDX: 9_#6, IDY: 12_#8, iX: 6, iY: 8 }
     7) { IDX: _#7, IDY: 13_#9, iX: 7, iY: 9 }
     8) { IDX: 12_#8, IDY: 15_#10, iX: 8, iY: 10 }
     9) { IDX: 13_#9, IDY: 16_#11, iX: 9, iY: 11 }
    10) { IDX: 15_#10, IDY: 18_#12, iX: 10, iY: 12 }
    11) { IDX: 16_#11, IDY: 19_#13, iX: 11, iY: 13 }
 1) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: 2_#2, iX: 0, iY: 2 }
     1) { IDX: 1_#1, IDY: 2_#3, iX: 1, iY: 3 }
     2) { IDX: _#2, IDY: _#4, iX: 2, iY: 4 }
     3) { IDX: 4_#3, IDY: _#5, iX: 3, iY: 5 }
     4) { IDX: 6_#4, IDY: 4_#6, iX: 4, iY: 6 }
     5) { IDX: 7_#5, IDY: 4_#7, iX: 5, iY: 7 }
     6) { IDX: 9_#6, IDY: 6_#8, iX: 6, iY: 8 }
     7) { IDX: _#7, IDY: 6_#9, iX: 7, iY: 9 }
     8) { IDX: 12_#8, IDY: 7_#10, iX: 8, iY: 10 }
     9) { IDX: 13_#9, IDY: 7_#11, iX: 9, iY: 11 }
    10) { IDX: 15_#10, IDY: _#12, iX: 10, iY: 12 }
    11) { IDX: 16_#11, IDY: _#13, iX: 11, iY: 13 }
    12) { IDX: 18_#12, IDY: 10_#14, iX: 12, iY: 14 }
    13) { IDX: 19_#13, IDY: 10_#15, iX: 13, iY: 15 }
 2) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: _#2, iX: 0, iY: 2 }
 3) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: 13_#2, iX: 0, iY: 2 }
 4) Sequence: Seq<{str,str,i8,i8}>
 5) <null>
 6) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: _#2, iX: 0, iY: 2 }
     1) { IDX: 0_#1, IDY: 4_#3, iX: 1, iY: 3 }
     2) { IDX: 2_#2, IDY: 6_#4, iX: 2, iY: 4 }
     3) { IDX: 2_#3, IDY: 7_#5, iX: 3, iY: 5 }
     4) { IDX: _#4, IDY: 9_#6, iX: 4, iY: 6 }
     5) { IDX: _#5, IDY: _#7, iX: 5, iY: 7 }
     6) { IDX: 4_#6, IDY: 12_#8, iX: 6, iY: 8 }
     7) { IDX: 4_#7, IDY: 13_#9, iX: 7, iY: 9 }
     8) { IDX: 6_#8, IDY: 15_#10, iX: 8, iY: 10 }
     9) { IDX: 6_#9, IDY: 16_#11, iX: 9, iY: 11 }
    10) { IDX: 7_#10, IDY: 18_#12, iX: 10, iY: 12 }
    11) { IDX: 7_#11, IDY: 19_#13, iX: 11, iY: 13 }
 7) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: 2_#2, iX: 0, iY: 2 }
     1) { IDX: 0_#1, IDY: 2_#3, iX: 1, iY: 3 }
     2) { IDX: 2_#2, IDY: _#4, iX: 2, iY: 4 }
     3) { IDX: 2_#3, IDY: _#5, iX: 3, iY: 5 }
     4) { IDX: _#4, IDY: 4_#6, iX: 4, iY: 6 }
     5) { IDX: _#5, IDY: 4_#7, iX: 5, iY: 7 }
     6) { IDX: 4_#6, IDY: 6_#8, iX: 6, iY: 8 }
     7) { IDX: 4_#7, IDY: 6_#9, iX: 7, iY: 9 }
     8) { IDX: 6_#8, IDY: 7_#10, iX: 8, iY: 10 }
     9) { IDX: 6_#9, IDY: 7_#11, iX: 9, iY: 11 }
    10) { IDX: 7_#10, IDY: _#12, iX: 10, iY: 12 }
    11) { IDX: 7_#11, IDY: _#13, iX: 11, iY: 13 }
    12) { IDX: _#12, IDY: 10_#14, iX: 12, iY: 14 }
    13) { IDX: _#13, IDY: 10_#15, iX: 13, iY: 15 }
    14) { IDX: 10_#14, IDY: 11_#16, iX: 14, iY: 16 }
    15) { IDX: 10_#15, IDY: 11_#17, iX: 15, iY: 17 }
    16) { IDX: 11_#16, IDY: 12_#18, iX: 16, iY: 18 }
    17) { IDX: 11_#17, IDY: 12_#19, iX: 17, iY: 19 }
    18) { IDX: 12_#18, IDY: 14_#20, iX: 18, iY: 20 }
    19) { IDX: 12_#19, IDY: 14_#21, iX: 19, iY: 21 }
    20) { IDX: 14_#20, IDY: 15_#22, iX: 20, iY: 22 }
    21) { IDX: 14_#21, IDY: 15_#23, iX: 21, iY: 23 }
    22) { IDX: 15_#22, IDY: 16_#24, iX: 22, iY: 24 }
    23) { IDX: 15_#23, IDY: 16_#25, iX: 23, iY: 25 }
    24) { IDX: 16_#24, IDY: _#26, iX: 24, iY: 26 }
    25) { IDX: 16_#25, IDY: _#27, iX: 25, iY: 27 }
    26) { IDX: _#26, IDY: 19_#28, iX: 26, iY: 28 }
    27) { IDX: _#27, IDY: 19_#29, iX: 27, iY: 29 }
 8) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: _#2, iX: 0, iY: 2 }
 9) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: 13_#2, iX: 0, iY: 2 }
10) Sequence: Seq<{str,str,i8,i8}>
11) <null>
12) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: _#0, IDY: _#2, iX: 0, iY: 2 }
     1) { IDX: _#1, IDY: 4_#3, iX: 1, iY: 3 }
     2) { IDX: _#2, IDY: 6_#4, iX: 2, iY: 4 }
13) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: _#0, IDY: 2_#2, iX: 0, iY: 2 }
     1) { IDX: _#1, IDY: 2_#3, iX: 1, iY: 3 }
     2) { IDX: _#2, IDY: _#4, iX: 2, iY: 4 }
14) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: _#0, IDY: _#2, iX: 0, iY: 2 }
15) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: _#0, IDY: 13_#2, iX: 0, iY: 2 }
16) Sequence: Seq<{str,str,i8,i8}>
17) <null>
18) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 11_#0, IDY: _#2, iX: 0, iY: 2 }
     1) { IDX: 12_#1, IDY: 4_#3, iX: 1, iY: 3 }
     2) { IDX: 13_#2, IDY: 6_#4, iX: 2, iY: 4 }
19) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 11_#0, IDY: 2_#2, iX: 0, iY: 2 }
     1) { IDX: 12_#1, IDY: 2_#3, iX: 1, iY: 3 }
     2) { IDX: 13_#2, IDY: _#4, iX: 2, iY: 4 }
20) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 11_#0, IDY: _#2, iX: 0, iY: 2 }
21) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 11_#0, IDY: 13_#2, iX: 0, iY: 2 }
22) Sequence: Seq<{str,str,i8,i8}>
23) <null>
24) Sequence: Seq<{str,str,i8,i8}>
25) Sequence: Seq<{str,str,i8,i8}>
26) Sequence: Seq<{str,str,i8,i8}>
27) Sequence: Seq<{str,str,i8,i8}>
28) Sequence: Seq<{str,str,i8,i8}>
29) <null>
30) <null>
31) <null>
32) <null>
33) <null>
34) <null>
35) <null>
*** Ctx ping count: 3074
    [0:2](3025=275+2750): CrossJoin(*4: *1x, *6: *2x, Test.Wrap(Add(#3, 2) @= #5), {IDX:*4.ID, IDY:*6.ID, iX:#3, iY:#5})
    [2:4](49=7+42): CrossJoin(*1: XSi, *2: YSi, true, CrossJoin(*4: *1, *6: *2, Test.Wrap(Add(#3, 2) @= #5), {IDX:*4.ID, IDY:*6.ID, iX:#3, iY:#5}))
###
> CrossJoin(X:XSi, Y:YSi, true, CrossJoin(x:X, y:Y, Wrap(#x + 2 =  #y), { iX: #x, IDX:x.ID, iY: #y, IDY:y.ID }, { iX: #, IDX:ID }))
CrossJoin(X : XSi, Y : YSi, true, CrossJoin(x : X, y : Y, Wrap(#x + 2 @= #y), { iX : #x, IDX : x.ID, iY : #y, IDY : y.ID }, { iX : #, IDX : ID })) : {IDX:s, IDY:s, iX:i8, iY:i8?}**
BndKind:Call, Type:{IDX:s, IDY:s, iX:i8, iY:i8?}**, Bnd:(Call(∂.CrossJoin([map:1] Global(XSi), [map:2] Global(YSi), true:b, Call(∂.CrossJoin([map:4] Scope(1), [map:6] Scope(2), Call(∂.Test.Wrap(Cmp(Add(Scope(3), 2:i8) @= Scope(5))):b), Ref<{IDX:s, IDY:s, iX:i8, iY:i8?}>({IDX:GetField(Scope(4), ID), IDY:GetField(Scope(6), ID), iX:Scope(3), iY:Scope(5)}), {IDX:GetField(Scope(4), ID), iX:Scope(3)[, IDY:str(<null>), iY:null:i8?]})))))
// (<ctx>, ∂.XSi:{ID:s, V:i8?}**, ∂.YSi:{ID:s, V:i8?}**) : {IDX:s, IDY:s, iX:i8, iY:i8?}**
CrossJoin_2(Arr<obj>, Seq<{str,i8}>, Seq<{str,i8}>):bool
      1) ldc.i4.1
      1) ret
  Total Size: 2

CrossJoin_2(Arr<obj>, i8, {str,i8}, i8, {str,i8}):bool
      1) ldarg.1 [i8]
      1) ldc.i4.2
      1) conv.i8
      1) add
      1) ldarg.3 [i8]
      2) ceq
      5) call static WrapFuncGen::Exec(bool):bool
      1) ret
  Total Size: 13

CrossJoin_3(Arr<obj>, i8, {str,i8}, i8, {str,i8}):{str,str,i8,i8}
      5) newobj {str,str,i8,i8}()
      1) dup
      2) ldc.i4.s [15]
      5) stfld {str,str,i8,i8}::_B0:u1
      1) stloc.0 [{str,str,i8,i8}]
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F0:str
      1) ldloc.0 [{str,str,i8,i8}]
      2) ldarg.s [{str,i8} (4)]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F1:str
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.1 [i8]
      5) stfld {str,str,i8,i8}::_F2:i8
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.3 [i8]
      5) stfld {str,str,i8,i8}::_F3:i8
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 68

CrossJoin_4(Arr<obj>, i8, {str,i8}):{str,str,i8,i8}
      5) newobj {str,str,i8,i8}()
      1) dup
      1) ldc.i4.7
      5) stfld {str,str,i8,i8}::_B0:u1
      1) stloc.0 [{str,str,i8,i8}]
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F0:str
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.1 [i8]
      5) stfld {str,str,i8,i8}::_F2:i8
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 47

CrossJoin_3(Arr<obj>, Seq<{str,i8}>, Seq<{str,i8}>):Seq<{str,str,i8,i8}>
      1) ldarg.1 [Seq<{str,i8}>]
      1) ldarg.2 [Seq<{str,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<i8,{str,i8},i8,{str,i8},bool>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [Func<i8,{str,i8},i8,{str,i8},{str,str,i8,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Func<i8,{str,i8},{str,str,i8,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [ExecCtx]
      1) ldc.i4.0
      5) call static CrossJoinGen::ExecInd(Seq<{str,i8}>, Seq<{str,i8}>, Func<i8,{str,i8},i8,{str,i8},bool>, Func<i8,{str,i8},i8,{str,i8},{str,str,i8,i8}>, Func<i8,{str,i8},{str,str,i8,i8}>, ExecCtx, i4):Seq<{str,str,i8,i8}>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<{str,str,i8,i8}>):Seq<{str,str,i8,i8}>
      1) ret
  Total Size: 60

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):ExecCtx
      1) stloc.0 [ExecCtx]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<Seq<{str,i8}>>
      1) stloc.1 [Seq<Seq<{str,i8}>>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.2
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<Seq<{str,i8}>>
      1) stloc.2 [Seq<Seq<{str,i8}>>]
      1) ldloc.1 [Seq<Seq<{str,i8}>>]
      1) ldloc.2 [Seq<Seq<{str,i8}>>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<Seq<{str,i8}>,Seq<{str,i8}>,bool>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [MethodInfo]
      5) ldtoken [Func<Seq<{str,i8}>,Seq<{str,i8}>,Seq<{str,str,i8,i8}>>]
      5) call static Type::GetTypeFromHandle(RuntimeTypeHandle):Type
      1) ldc.i4.2
      5) newarr [obj]
      1) dup
      1) ldc.i4.0
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Arr<obj>]
      5) stelem [Arr<obj>]
      1) dup
      1) ldc.i4.1
      1) ldloc.0 [ExecCtx]
      5) stelem [ExecCtx]
      5) callvirt DynamicMethod::CreateDelegate(Type, obj):Delegate
      1) ldloc.0 [ExecCtx]
      1) ldc.i4.2
      5) call static CrossJoinGen::Exec(Seq<Seq<{str,i8}>>, Seq<Seq<{str,i8}>>, Func<Seq<{str,i8}>,Seq<{str,i8}>,bool>, Func<Seq<{str,i8}>,Seq<{str,i8}>,Seq<{str,str,i8,i8}>>, ExecCtx, i4):Seq<Seq<{str,str,i8,i8}>>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<Seq<{str,str,i8,i8}>>):Seq<Seq<{str,str,i8,i8}>>
      1) ret
  Total Size: 99

Func sig: (<ctx>:x, XSi:{ID:s, V:i8?}**, YSi:{ID:s, V:i8?}**) to {IDX:s, IDY:s, iX:i8, iY:i8?}**
Sequence: Seq<Seq<{str,str,i8,i8}>>
 0) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: _#2, iX: 0, iY: 2 }
     1) { IDX: 1_#1, IDY: 4_#3, iX: 1, iY: 3 }
     2) { IDX: _#2, IDY: 6_#4, iX: 2, iY: 4 }
     3) { IDX: 4_#3, IDY: 7_#5, iX: 3, iY: 5 }
     4) { IDX: 6_#4, IDY: 9_#6, iX: 4, iY: 6 }
     5) { IDX: 7_#5, IDY: _#7, iX: 5, iY: 7 }
     6) { IDX: 9_#6, IDY: 12_#8, iX: 6, iY: 8 }
     7) { IDX: _#7, IDY: 13_#9, iX: 7, iY: 9 }
     8) { IDX: 12_#8, IDY: 15_#10, iX: 8, iY: 10 }
     9) { IDX: 13_#9, IDY: 16_#11, iX: 9, iY: 11 }
    10) { IDX: 15_#10, IDY: 18_#12, iX: 10, iY: 12 }
    11) { IDX: 16_#11, IDY: 19_#13, iX: 11, iY: 13 }
    12) { IDX: 18_#12, IDY: <null>, iX: 12, iY: <null> }
    13) { IDX: 19_#13, IDY: <null>, iX: 13, iY: <null> }
 1) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: 2_#2, iX: 0, iY: 2 }
     1) { IDX: 1_#1, IDY: 2_#3, iX: 1, iY: 3 }
     2) { IDX: _#2, IDY: _#4, iX: 2, iY: 4 }
     3) { IDX: 4_#3, IDY: _#5, iX: 3, iY: 5 }
     4) { IDX: 6_#4, IDY: 4_#6, iX: 4, iY: 6 }
     5) { IDX: 7_#5, IDY: 4_#7, iX: 5, iY: 7 }
     6) { IDX: 9_#6, IDY: 6_#8, iX: 6, iY: 8 }
     7) { IDX: _#7, IDY: 6_#9, iX: 7, iY: 9 }
     8) { IDX: 12_#8, IDY: 7_#10, iX: 8, iY: 10 }
     9) { IDX: 13_#9, IDY: 7_#11, iX: 9, iY: 11 }
    10) { IDX: 15_#10, IDY: _#12, iX: 10, iY: 12 }
    11) { IDX: 16_#11, IDY: _#13, iX: 11, iY: 13 }
    12) { IDX: 18_#12, IDY: 10_#14, iX: 12, iY: 14 }
    13) { IDX: 19_#13, IDY: 10_#15, iX: 13, iY: 15 }
 2) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: _#2, iX: 0, iY: 2 }
     1) { IDX: 1_#1, IDY: <null>, iX: 1, iY: <null> }
     2) { IDX: _#2, IDY: <null>, iX: 2, iY: <null> }
     3) { IDX: 4_#3, IDY: <null>, iX: 3, iY: <null> }
     4) { IDX: 6_#4, IDY: <null>, iX: 4, iY: <null> }
     5) { IDX: 7_#5, IDY: <null>, iX: 5, iY: <null> }
     6) { IDX: 9_#6, IDY: <null>, iX: 6, iY: <null> }
     7) { IDX: _#7, IDY: <null>, iX: 7, iY: <null> }
     8) { IDX: 12_#8, IDY: <null>, iX: 8, iY: <null> }
     9) { IDX: 13_#9, IDY: <null>, iX: 9, iY: <null> }
    10) { IDX: 15_#10, IDY: <null>, iX: 10, iY: <null> }
    11) { IDX: 16_#11, IDY: <null>, iX: 11, iY: <null> }
    12) { IDX: 18_#12, IDY: <null>, iX: 12, iY: <null> }
    13) { IDX: 19_#13, IDY: <null>, iX: 13, iY: <null> }
 3) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: 13_#2, iX: 0, iY: 2 }
     1) { IDX: 1_#1, IDY: <null>, iX: 1, iY: <null> }
     2) { IDX: _#2, IDY: <null>, iX: 2, iY: <null> }
     3) { IDX: 4_#3, IDY: <null>, iX: 3, iY: <null> }
     4) { IDX: 6_#4, IDY: <null>, iX: 4, iY: <null> }
     5) { IDX: 7_#5, IDY: <null>, iX: 5, iY: <null> }
     6) { IDX: 9_#6, IDY: <null>, iX: 6, iY: <null> }
     7) { IDX: _#7, IDY: <null>, iX: 7, iY: <null> }
     8) { IDX: 12_#8, IDY: <null>, iX: 8, iY: <null> }
     9) { IDX: 13_#9, IDY: <null>, iX: 9, iY: <null> }
    10) { IDX: 15_#10, IDY: <null>, iX: 10, iY: <null> }
    11) { IDX: 16_#11, IDY: <null>, iX: 11, iY: <null> }
    12) { IDX: 18_#12, IDY: <null>, iX: 12, iY: <null> }
    13) { IDX: 19_#13, IDY: <null>, iX: 13, iY: <null> }
 4) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: <null>, iX: 0, iY: <null> }
     1) { IDX: 1_#1, IDY: <null>, iX: 1, iY: <null> }
     2) { IDX: _#2, IDY: <null>, iX: 2, iY: <null> }
     3) { IDX: 4_#3, IDY: <null>, iX: 3, iY: <null> }
     4) { IDX: 6_#4, IDY: <null>, iX: 4, iY: <null> }
     5) { IDX: 7_#5, IDY: <null>, iX: 5, iY: <null> }
     6) { IDX: 9_#6, IDY: <null>, iX: 6, iY: <null> }
     7) { IDX: _#7, IDY: <null>, iX: 7, iY: <null> }
     8) { IDX: 12_#8, IDY: <null>, iX: 8, iY: <null> }
     9) { IDX: 13_#9, IDY: <null>, iX: 9, iY: <null> }
    10) { IDX: 15_#10, IDY: <null>, iX: 10, iY: <null> }
    11) { IDX: 16_#11, IDY: <null>, iX: 11, iY: <null> }
    12) { IDX: 18_#12, IDY: <null>, iX: 12, iY: <null> }
    13) { IDX: 19_#13, IDY: <null>, iX: 13, iY: <null> }
 5) <null>
 6) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: _#2, iX: 0, iY: 2 }
     1) { IDX: 0_#1, IDY: 4_#3, iX: 1, iY: 3 }
     2) { IDX: 2_#2, IDY: 6_#4, iX: 2, iY: 4 }
     3) { IDX: 2_#3, IDY: 7_#5, iX: 3, iY: 5 }
     4) { IDX: _#4, IDY: 9_#6, iX: 4, iY: 6 }
     5) { IDX: _#5, IDY: _#7, iX: 5, iY: 7 }
     6) { IDX: 4_#6, IDY: 12_#8, iX: 6, iY: 8 }
     7) { IDX: 4_#7, IDY: 13_#9, iX: 7, iY: 9 }
     8) { IDX: 6_#8, IDY: 15_#10, iX: 8, iY: 10 }
     9) { IDX: 6_#9, IDY: 16_#11, iX: 9, iY: 11 }
    10) { IDX: 7_#10, IDY: 18_#12, iX: 10, iY: 12 }
    11) { IDX: 7_#11, IDY: 19_#13, iX: 11, iY: 13 }
    12) { IDX: _#12, IDY: <null>, iX: 12, iY: <null> }
    13) { IDX: _#13, IDY: <null>, iX: 13, iY: <null> }
    14) { IDX: 10_#14, IDY: <null>, iX: 14, iY: <null> }
    15) { IDX: 10_#15, IDY: <null>, iX: 15, iY: <null> }
    16) { IDX: 11_#16, IDY: <null>, iX: 16, iY: <null> }
    17) { IDX: 11_#17, IDY: <null>, iX: 17, iY: <null> }
    18) { IDX: 12_#18, IDY: <null>, iX: 18, iY: <null> }
    19) { IDX: 12_#19, IDY: <null>, iX: 19, iY: <null> }
    20) { IDX: 14_#20, IDY: <null>, iX: 20, iY: <null> }
    21) { IDX: 14_#21, IDY: <null>, iX: 21, iY: <null> }
    22) { IDX: 15_#22, IDY: <null>, iX: 22, iY: <null> }
    23) { IDX: 15_#23, IDY: <null>, iX: 23, iY: <null> }
    24) { IDX: 16_#24, IDY: <null>, iX: 24, iY: <null> }
    25) { IDX: 16_#25, IDY: <null>, iX: 25, iY: <null> }
    26) { IDX: _#26, IDY: <null>, iX: 26, iY: <null> }
    27) { IDX: _#27, IDY: <null>, iX: 27, iY: <null> }
    28) { IDX: 19_#28, IDY: <null>, iX: 28, iY: <null> }
    29) { IDX: 19_#29, IDY: <null>, iX: 29, iY: <null> }
 7) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: 2_#2, iX: 0, iY: 2 }
     1) { IDX: 0_#1, IDY: 2_#3, iX: 1, iY: 3 }
     2) { IDX: 2_#2, IDY: _#4, iX: 2, iY: 4 }
     3) { IDX: 2_#3, IDY: _#5, iX: 3, iY: 5 }
     4) { IDX: _#4, IDY: 4_#6, iX: 4, iY: 6 }
     5) { IDX: _#5, IDY: 4_#7, iX: 5, iY: 7 }
     6) { IDX: 4_#6, IDY: 6_#8, iX: 6, iY: 8 }
     7) { IDX: 4_#7, IDY: 6_#9, iX: 7, iY: 9 }
     8) { IDX: 6_#8, IDY: 7_#10, iX: 8, iY: 10 }
     9) { IDX: 6_#9, IDY: 7_#11, iX: 9, iY: 11 }
    10) { IDX: 7_#10, IDY: _#12, iX: 10, iY: 12 }
    11) { IDX: 7_#11, IDY: _#13, iX: 11, iY: 13 }
    12) { IDX: _#12, IDY: 10_#14, iX: 12, iY: 14 }
    13) { IDX: _#13, IDY: 10_#15, iX: 13, iY: 15 }
    14) { IDX: 10_#14, IDY: 11_#16, iX: 14, iY: 16 }
    15) { IDX: 10_#15, IDY: 11_#17, iX: 15, iY: 17 }
    16) { IDX: 11_#16, IDY: 12_#18, iX: 16, iY: 18 }
    17) { IDX: 11_#17, IDY: 12_#19, iX: 17, iY: 19 }
    18) { IDX: 12_#18, IDY: 14_#20, iX: 18, iY: 20 }
    19) { IDX: 12_#19, IDY: 14_#21, iX: 19, iY: 21 }
    20) { IDX: 14_#20, IDY: 15_#22, iX: 20, iY: 22 }
    21) { IDX: 14_#21, IDY: 15_#23, iX: 21, iY: 23 }
    22) { IDX: 15_#22, IDY: 16_#24, iX: 22, iY: 24 }
    23) { IDX: 15_#23, IDY: 16_#25, iX: 23, iY: 25 }
    24) { IDX: 16_#24, IDY: _#26, iX: 24, iY: 26 }
    25) { IDX: 16_#25, IDY: _#27, iX: 25, iY: 27 }
    26) { IDX: _#26, IDY: 19_#28, iX: 26, iY: 28 }
    27) { IDX: _#27, IDY: 19_#29, iX: 27, iY: 29 }
    28) { IDX: 19_#28, IDY: <null>, iX: 28, iY: <null> }
    29) { IDX: 19_#29, IDY: <null>, iX: 29, iY: <null> }
 8) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: _#2, iX: 0, iY: 2 }
     1) { IDX: 0_#1, IDY: <null>, iX: 1, iY: <null> }
     2) { IDX: 2_#2, IDY: <null>, iX: 2, iY: <null> }
     3) { IDX: 2_#3, IDY: <null>, iX: 3, iY: <null> }
     4) { IDX: _#4, IDY: <null>, iX: 4, iY: <null> }
     5) { IDX: _#5, IDY: <null>, iX: 5, iY: <null> }
     6) { IDX: 4_#6, IDY: <null>, iX: 6, iY: <null> }
     7) { IDX: 4_#7, IDY: <null>, iX: 7, iY: <null> }
     8) { IDX: 6_#8, IDY: <null>, iX: 8, iY: <null> }
     9) { IDX: 6_#9, IDY: <null>, iX: 9, iY: <null> }
    10) { IDX: 7_#10, IDY: <null>, iX: 10, iY: <null> }
    11) { IDX: 7_#11, IDY: <null>, iX: 11, iY: <null> }
    12) { IDX: _#12, IDY: <null>, iX: 12, iY: <null> }
    13) { IDX: _#13, IDY: <null>, iX: 13, iY: <null> }
    14) { IDX: 10_#14, IDY: <null>, iX: 14, iY: <null> }
    15) { IDX: 10_#15, IDY: <null>, iX: 15, iY: <null> }
    16) { IDX: 11_#16, IDY: <null>, iX: 16, iY: <null> }
    17) { IDX: 11_#17, IDY: <null>, iX: 17, iY: <null> }
    18) { IDX: 12_#18, IDY: <null>, iX: 18, iY: <null> }
    19) { IDX: 12_#19, IDY: <null>, iX: 19, iY: <null> }
    20) { IDX: 14_#20, IDY: <null>, iX: 20, iY: <null> }
    21) { IDX: 14_#21, IDY: <null>, iX: 21, iY: <null> }
    22) { IDX: 15_#22, IDY: <null>, iX: 22, iY: <null> }
    23) { IDX: 15_#23, IDY: <null>, iX: 23, iY: <null> }
    24) { IDX: 16_#24, IDY: <null>, iX: 24, iY: <null> }
    25) { IDX: 16_#25, IDY: <null>, iX: 25, iY: <null> }
    26) { IDX: _#26, IDY: <null>, iX: 26, iY: <null> }
    27) { IDX: _#27, IDY: <null>, iX: 27, iY: <null> }
    28) { IDX: 19_#28, IDY: <null>, iX: 28, iY: <null> }
    29) { IDX: 19_#29, IDY: <null>, iX: 29, iY: <null> }
 9) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: 13_#2, iX: 0, iY: 2 }
     1) { IDX: 0_#1, IDY: <null>, iX: 1, iY: <null> }
     2) { IDX: 2_#2, IDY: <null>, iX: 2, iY: <null> }
     3) { IDX: 2_#3, IDY: <null>, iX: 3, iY: <null> }
     4) { IDX: _#4, IDY: <null>, iX: 4, iY: <null> }
     5) { IDX: _#5, IDY: <null>, iX: 5, iY: <null> }
     6) { IDX: 4_#6, IDY: <null>, iX: 6, iY: <null> }
     7) { IDX: 4_#7, IDY: <null>, iX: 7, iY: <null> }
     8) { IDX: 6_#8, IDY: <null>, iX: 8, iY: <null> }
     9) { IDX: 6_#9, IDY: <null>, iX: 9, iY: <null> }
    10) { IDX: 7_#10, IDY: <null>, iX: 10, iY: <null> }
    11) { IDX: 7_#11, IDY: <null>, iX: 11, iY: <null> }
    12) { IDX: _#12, IDY: <null>, iX: 12, iY: <null> }
    13) { IDX: _#13, IDY: <null>, iX: 13, iY: <null> }
    14) { IDX: 10_#14, IDY: <null>, iX: 14, iY: <null> }
    15) { IDX: 10_#15, IDY: <null>, iX: 15, iY: <null> }
    16) { IDX: 11_#16, IDY: <null>, iX: 16, iY: <null> }
    17) { IDX: 11_#17, IDY: <null>, iX: 17, iY: <null> }
    18) { IDX: 12_#18, IDY: <null>, iX: 18, iY: <null> }
    19) { IDX: 12_#19, IDY: <null>, iX: 19, iY: <null> }
    20) { IDX: 14_#20, IDY: <null>, iX: 20, iY: <null> }
    21) { IDX: 14_#21, IDY: <null>, iX: 21, iY: <null> }
    22) { IDX: 15_#22, IDY: <null>, iX: 22, iY: <null> }
    23) { IDX: 15_#23, IDY: <null>, iX: 23, iY: <null> }
    24) { IDX: 16_#24, IDY: <null>, iX: 24, iY: <null> }
    25) { IDX: 16_#25, IDY: <null>, iX: 25, iY: <null> }
    26) { IDX: _#26, IDY: <null>, iX: 26, iY: <null> }
    27) { IDX: _#27, IDY: <null>, iX: 27, iY: <null> }
    28) { IDX: 19_#28, IDY: <null>, iX: 28, iY: <null> }
    29) { IDX: 19_#29, IDY: <null>, iX: 29, iY: <null> }
10) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: <null>, iX: 0, iY: <null> }
     1) { IDX: 0_#1, IDY: <null>, iX: 1, iY: <null> }
     2) { IDX: 2_#2, IDY: <null>, iX: 2, iY: <null> }
     3) { IDX: 2_#3, IDY: <null>, iX: 3, iY: <null> }
     4) { IDX: _#4, IDY: <null>, iX: 4, iY: <null> }
     5) { IDX: _#5, IDY: <null>, iX: 5, iY: <null> }
     6) { IDX: 4_#6, IDY: <null>, iX: 6, iY: <null> }
     7) { IDX: 4_#7, IDY: <null>, iX: 7, iY: <null> }
     8) { IDX: 6_#8, IDY: <null>, iX: 8, iY: <null> }
     9) { IDX: 6_#9, IDY: <null>, iX: 9, iY: <null> }
    10) { IDX: 7_#10, IDY: <null>, iX: 10, iY: <null> }
    11) { IDX: 7_#11, IDY: <null>, iX: 11, iY: <null> }
    12) { IDX: _#12, IDY: <null>, iX: 12, iY: <null> }
    13) { IDX: _#13, IDY: <null>, iX: 13, iY: <null> }
    14) { IDX: 10_#14, IDY: <null>, iX: 14, iY: <null> }
    15) { IDX: 10_#15, IDY: <null>, iX: 15, iY: <null> }
    16) { IDX: 11_#16, IDY: <null>, iX: 16, iY: <null> }
    17) { IDX: 11_#17, IDY: <null>, iX: 17, iY: <null> }
    18) { IDX: 12_#18, IDY: <null>, iX: 18, iY: <null> }
    19) { IDX: 12_#19, IDY: <null>, iX: 19, iY: <null> }
    20) { IDX: 14_#20, IDY: <null>, iX: 20, iY: <null> }
    21) { IDX: 14_#21, IDY: <null>, iX: 21, iY: <null> }
    22) { IDX: 15_#22, IDY: <null>, iX: 22, iY: <null> }
    23) { IDX: 15_#23, IDY: <null>, iX: 23, iY: <null> }
    24) { IDX: 16_#24, IDY: <null>, iX: 24, iY: <null> }
    25) { IDX: 16_#25, IDY: <null>, iX: 25, iY: <null> }
    26) { IDX: _#26, IDY: <null>, iX: 26, iY: <null> }
    27) { IDX: _#27, IDY: <null>, iX: 27, iY: <null> }
    28) { IDX: 19_#28, IDY: <null>, iX: 28, iY: <null> }
    29) { IDX: 19_#29, IDY: <null>, iX: 29, iY: <null> }
11) <null>
12) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: _#0, IDY: _#2, iX: 0, iY: 2 }
     1) { IDX: _#1, IDY: 4_#3, iX: 1, iY: 3 }
     2) { IDX: _#2, IDY: 6_#4, iX: 2, iY: 4 }
13) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: _#0, IDY: 2_#2, iX: 0, iY: 2 }
     1) { IDX: _#1, IDY: 2_#3, iX: 1, iY: 3 }
     2) { IDX: _#2, IDY: _#4, iX: 2, iY: 4 }
14) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: _#0, IDY: _#2, iX: 0, iY: 2 }
     1) { IDX: _#1, IDY: <null>, iX: 1, iY: <null> }
     2) { IDX: _#2, IDY: <null>, iX: 2, iY: <null> }
15) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: _#0, IDY: 13_#2, iX: 0, iY: 2 }
     1) { IDX: _#1, IDY: <null>, iX: 1, iY: <null> }
     2) { IDX: _#2, IDY: <null>, iX: 2, iY: <null> }
16) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: _#0, IDY: <null>, iX: 0, iY: <null> }
     1) { IDX: _#1, IDY: <null>, iX: 1, iY: <null> }
     2) { IDX: _#2, IDY: <null>, iX: 2, iY: <null> }
17) <null>
18) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 11_#0, IDY: _#2, iX: 0, iY: 2 }
     1) { IDX: 12_#1, IDY: 4_#3, iX: 1, iY: 3 }
     2) { IDX: 13_#2, IDY: 6_#4, iX: 2, iY: 4 }
19) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 11_#0, IDY: 2_#2, iX: 0, iY: 2 }
     1) { IDX: 12_#1, IDY: 2_#3, iX: 1, iY: 3 }
     2) { IDX: 13_#2, IDY: _#4, iX: 2, iY: 4 }
20) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 11_#0, IDY: _#2, iX: 0, iY: 2 }
     1) { IDX: 12_#1, IDY: <null>, iX: 1, iY: <null> }
     2) { IDX: 13_#2, IDY: <null>, iX: 2, iY: <null> }
21) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 11_#0, IDY: 13_#2, iX: 0, iY: 2 }
     1) { IDX: 12_#1, IDY: <null>, iX: 1, iY: <null> }
     2) { IDX: 13_#2, IDY: <null>, iX: 2, iY: <null> }
22) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 11_#0, IDY: <null>, iX: 0, iY: <null> }
     1) { IDX: 12_#1, IDY: <null>, iX: 1, iY: <null> }
     2) { IDX: 13_#2, IDY: <null>, iX: 2, iY: <null> }
23) <null>
24) Sequence: Seq<{str,str,i8,i8}>
25) Sequence: Seq<{str,str,i8,i8}>
26) Sequence: Seq<{str,str,i8,i8}>
27) Sequence: Seq<{str,str,i8,i8}>
28) Sequence: Seq<{str,str,i8,i8}>
29) <null>
30) <null>
31) <null>
32) <null>
33) <null>
34) <null>
35) <null>
*** Ctx ping count: 3074
    [0:2](3025=275+2750): CrossJoin(*4: *1x, *6: *2x, Test.Wrap(Add(#3, 2) @= #5), Ref<{IDX:s, IDY:s, iX:i8, iY:i8?}>({IDX:*4.ID, IDY:*6.ID, iX:#3, iY:#5}), {IDX:*4.ID, iX:#3[, IDY:str(<null>), iY:null:i8?]})
    [2:4](49=7+42): CrossJoin(*1: XSi, *2: YSi, true, CrossJoin(*4: *1, *6: *2, Test.Wrap(Add(#3, 2) @= #5), Ref<{IDX:s, IDY:s, iX:i8, iY:i8?}>({IDX:*4.ID, IDY:*6.ID, iX:#3, iY:#5}), {IDX:*4.ID, iX:#3[, IDY:str(<null>), iY:null:i8?]}))
###
> CrossJoin(X:XSi, Y:YSi, true, CrossJoin(x:X, y:Y, Wrap(   x.V = y.V), { iX: #x, IDX:x.ID, iY: #y, IDY:y.ID }, { iX: #, IDX:ID }, { iY: #, IDY:ID }))
CrossJoin(X : XSi, Y : YSi, true, CrossJoin(x : X, y : Y, Wrap(x.V @= y.V), { iX : #x, IDX : x.ID, iY : #y, IDY : y.ID }, { iX : #, IDX : ID }, { iY : #, IDY : ID })) : {IDX:s, IDY:s, iX:i8?, iY:i8?}**
BndKind:Call, Type:{IDX:s, IDY:s, iX:i8?, iY:i8?}**, Bnd:(Call(∂.CrossJoin([map:1] Global(XSi), [map:2] Global(YSi), true:b, Call(∂.CrossJoin([map:4] Scope(1), [map:6] Scope(2), Call(∂.Test.Wrap(Cmp(GetField(Scope(4), V) @= GetField(Scope(6), V))):b), Ref<{IDX:s, IDY:s, iX:i8?, iY:i8?}>({IDX:GetField(Scope(4), ID), IDY:GetField(Scope(6), ID), iX:Scope(3), iY:Scope(5)}), {IDX:GetField(Scope(4), ID), iX:Opt<i8?>(Scope(3))[, IDY:str(<null>), iY:null:i8?]}, {IDY:GetField(Scope(6), ID), iY:Opt<i8?>(Scope(5))[, IDX:str(<null>), iX:null:i8?]})))))
// (<ctx>, ∂.XSi:{ID:s, V:i8?}**, ∂.YSi:{ID:s, V:i8?}**) : {IDX:s, IDY:s, iX:i8?, iY:i8?}**
CrossJoin_2(Arr<obj>, Seq<{str,i8}>, Seq<{str,i8}>):bool
      1) ldc.i4.1
      1) ret
  Total Size: 2

CrossJoin_2(Arr<obj>, i8, {str,i8}, i8, {str,i8}):bool
      1) ldarg.2 [{str,i8}]
      1) dup
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      5) ldfld {str,i8}::_F1:i8
      5) newobj Opt<i8>(i8)
      5) br [1]
  Label [0]:
      1) pop
      5) call static CodeGenUtil::GetDefault():Opt<i8>
  Label [1]:
      1) stloc.0 [Opt<i8>]
      2) ldarg.s [{str,i8} (4)]
      1) dup
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [2]
      5) ldfld {str,i8}::_F1:i8
      5) newobj Opt<i8>(i8)
      5) br [3]
  Label [2]:
      1) pop
      5) call static CodeGenUtil::GetDefault():Opt<i8>
  Label [3]:
      1) stloc.1 [Opt<i8>]
      2) ldloca.s [Opt<i8> (0)]
      5) call Opt<i8>::get_HasValue():bool
      2) ldloca.s [Opt<i8> (1)]
      5) call Opt<i8>::get_HasValue():bool
      5) bne.un [4]
      2) ldloca.s [Opt<i8> (0)]
      5) call Opt<i8>::GetValueOrDefault():i8
      2) ldloca.s [Opt<i8> (1)]
      5) call Opt<i8>::GetValueOrDefault():i8
      2) ceq
      5) br [5]
  Label [4]:
      1) ldc.i4.0
  Label [5]:
      5) call static WrapFuncGen::Exec(bool):bool
      1) ret
  Total Size: 120

CrossJoin_3(Arr<obj>, i8, {str,i8}, i8, {str,i8}):{str,str,i8,i8}
      5) newobj {str,str,i8,i8}()
      1) dup
      2) ldc.i4.s [15]
      5) stfld {str,str,i8,i8}::_B0:u1
      1) stloc.0 [{str,str,i8,i8}]
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F0:str
      1) ldloc.0 [{str,str,i8,i8}]
      2) ldarg.s [{str,i8} (4)]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F1:str
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.1 [i8]
      5) stfld {str,str,i8,i8}::_F2:i8
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.3 [i8]
      5) stfld {str,str,i8,i8}::_F3:i8
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 68

CrossJoin_4(Arr<obj>, i8, {str,i8}):{str,str,i8,i8}
      5) newobj {str,str,i8,i8}()
      1) dup
      1) ldc.i4.3
      5) stfld {str,str,i8,i8}::_B0:u1
      1) stloc.0 [{str,str,i8,i8}]
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F0:str
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.1 [i8]
      5) stfld {str,str,i8,i8}::_F2:i8
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.4
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 61

CrossJoin_5(Arr<obj>, i8, {str,i8}):{str,str,i8,i8}
      5) newobj {str,str,i8,i8}()
      1) dup
      1) ldc.i4.3
      5) stfld {str,str,i8,i8}::_B0:u1
      1) stloc.0 [{str,str,i8,i8}]
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F1:str
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.1 [i8]
      5) stfld {str,str,i8,i8}::_F3:i8
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.8
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 61

CrossJoin_3(Arr<obj>, Seq<{str,i8}>, Seq<{str,i8}>):Seq<{str,str,i8,i8}>
      1) ldarg.1 [Seq<{str,i8}>]
      1) ldarg.2 [Seq<{str,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<i8,{str,i8},i8,{str,i8},bool>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [Func<i8,{str,i8},i8,{str,i8},{str,str,i8,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Func<i8,{str,i8},{str,str,i8,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.3
      5) ldelem [Func<i8,{str,i8},{str,str,i8,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [ExecCtx]
      1) ldc.i4.0
      5) call static CrossJoinGen::ExecInd(Seq<{str,i8}>, Seq<{str,i8}>, Func<i8,{str,i8},i8,{str,i8},bool>, Func<i8,{str,i8},i8,{str,i8},{str,str,i8,i8}>, Func<i8,{str,i8},{str,str,i8,i8}>, Func<i8,{str,i8},{str,str,i8,i8}>, ExecCtx, i4):Seq<{str,str,i8,i8}>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<{str,str,i8,i8}>):Seq<{str,str,i8,i8}>
      1) ret
  Total Size: 73

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):ExecCtx
      1) stloc.0 [ExecCtx]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<Seq<{str,i8}>>
      1) stloc.1 [Seq<Seq<{str,i8}>>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.2
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<Seq<{str,i8}>>
      1) stloc.2 [Seq<Seq<{str,i8}>>]
      1) ldloc.1 [Seq<Seq<{str,i8}>>]
      1) ldloc.2 [Seq<Seq<{str,i8}>>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<Seq<{str,i8}>,Seq<{str,i8}>,bool>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [MethodInfo]
      5) ldtoken [Func<Seq<{str,i8}>,Seq<{str,i8}>,Seq<{str,str,i8,i8}>>]
      5) call static Type::GetTypeFromHandle(RuntimeTypeHandle):Type
      1) ldc.i4.2
      5) newarr [obj]
      1) dup
      1) ldc.i4.0
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Arr<obj>]
      5) stelem [Arr<obj>]
      1) dup
      1) ldc.i4.1
      1) ldloc.0 [ExecCtx]
      5) stelem [ExecCtx]
      5) callvirt DynamicMethod::CreateDelegate(Type, obj):Delegate
      1) ldloc.0 [ExecCtx]
      1) ldc.i4.2
      5) call static CrossJoinGen::Exec(Seq<Seq<{str,i8}>>, Seq<Seq<{str,i8}>>, Func<Seq<{str,i8}>,Seq<{str,i8}>,bool>, Func<Seq<{str,i8}>,Seq<{str,i8}>,Seq<{str,str,i8,i8}>>, ExecCtx, i4):Seq<Seq<{str,str,i8,i8}>>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<Seq<{str,str,i8,i8}>>):Seq<Seq<{str,str,i8,i8}>>
      1) ret
  Total Size: 99

Func sig: (<ctx>:x, XSi:{ID:s, V:i8?}**, YSi:{ID:s, V:i8?}**) to {IDX:s, IDY:s, iX:i8?, iY:i8?}**
Sequence: Seq<Seq<{str,str,i8,i8}>>
 0) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: 0_#0, iX: 0, iY: 0 }
     1) { IDX: 1_#1, IDY: 1_#1, iX: 1, iY: 1 }
     2) { IDX: _#2, IDY: _#2, iX: 2, iY: 2 }
     3) { IDX: _#2, IDY: _#7, iX: 2, iY: 7 }
     4) { IDX: 4_#3, IDY: 4_#3, iX: 3, iY: 3 }
     5) { IDX: 6_#4, IDY: 6_#4, iX: 4, iY: 4 }
     6) { IDX: 7_#5, IDY: 7_#5, iX: 5, iY: 5 }
     7) { IDX: 9_#6, IDY: 9_#6, iX: 6, iY: 6 }
     8) { IDX: _#7, IDY: _#2, iX: 7, iY: 2 }
     9) { IDX: _#7, IDY: _#7, iX: 7, iY: 7 }
    10) { IDX: 12_#8, IDY: 12_#8, iX: 8, iY: 8 }
    11) { IDX: 13_#9, IDY: 13_#9, iX: 9, iY: 9 }
    12) { IDX: 15_#10, IDY: 15_#10, iX: 10, iY: 10 }
    13) { IDX: 16_#11, IDY: 16_#11, iX: 11, iY: 11 }
    14) { IDX: 18_#12, IDY: 18_#12, iX: 12, iY: 12 }
    15) { IDX: 19_#13, IDY: 19_#13, iX: 13, iY: 13 }
 1) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: 0_#0, iX: 0, iY: 0 }
     1) { IDX: 0_#0, IDY: 0_#1, iX: 0, iY: 1 }
     2) { IDX: 1_#1, IDY: <null>, iX: 1, iY: <null> }
     3) { IDX: _#2, IDY: _#4, iX: 2, iY: 4 }
     4) { IDX: _#2, IDY: _#5, iX: 2, iY: 5 }
     5) { IDX: _#2, IDY: _#12, iX: 2, iY: 12 }
     6) { IDX: _#2, IDY: _#13, iX: 2, iY: 13 }
     7) { IDX: _#2, IDY: _#26, iX: 2, iY: 26 }
     8) { IDX: _#2, IDY: _#27, iX: 2, iY: 27 }
     9) { IDX: 4_#3, IDY: 4_#6, iX: 3, iY: 6 }
    10) { IDX: 4_#3, IDY: 4_#7, iX: 3, iY: 7 }
    11) { IDX: 6_#4, IDY: 6_#8, iX: 4, iY: 8 }
    12) { IDX: 6_#4, IDY: 6_#9, iX: 4, iY: 9 }
    13) { IDX: 7_#5, IDY: 7_#10, iX: 5, iY: 10 }
    14) { IDX: 7_#5, IDY: 7_#11, iX: 5, iY: 11 }
    15) { IDX: 9_#6, IDY: <null>, iX: 6, iY: <null> }
    16) { IDX: _#7, IDY: _#4, iX: 7, iY: 4 }
    17) { IDX: _#7, IDY: _#5, iX: 7, iY: 5 }
    18) { IDX: _#7, IDY: _#12, iX: 7, iY: 12 }
    19) { IDX: _#7, IDY: _#13, iX: 7, iY: 13 }
    20) { IDX: _#7, IDY: _#26, iX: 7, iY: 26 }
    21) { IDX: _#7, IDY: _#27, iX: 7, iY: 27 }
    22) { IDX: 12_#8, IDY: 12_#18, iX: 8, iY: 18 }
    23) { IDX: 12_#8, IDY: 12_#19, iX: 8, iY: 19 }
    24) { IDX: 13_#9, IDY: <null>, iX: 9, iY: <null> }
    25) { IDX: 15_#10, IDY: 15_#22, iX: 10, iY: 22 }
    26) { IDX: 15_#10, IDY: 15_#23, iX: 10, iY: 23 }
    27) { IDX: 16_#11, IDY: 16_#24, iX: 11, iY: 24 }
    28) { IDX: 16_#11, IDY: 16_#25, iX: 11, iY: 25 }
    29) { IDX: 18_#12, IDY: <null>, iX: 12, iY: <null> }
    30) { IDX: 19_#13, IDY: 19_#28, iX: 13, iY: 28 }
    31) { IDX: 19_#13, IDY: 19_#29, iX: 13, iY: 29 }
    32) { IDX: <null>, IDY: 2_#2, iX: <null>, iY: 2 }
    33) { IDX: <null>, IDY: 2_#3, iX: <null>, iY: 3 }
    34) { IDX: <null>, IDY: 10_#14, iX: <null>, iY: 14 }
    35) { IDX: <null>, IDY: 10_#15, iX: <null>, iY: 15 }
    36) { IDX: <null>, IDY: 11_#16, iX: <null>, iY: 16 }
    37) { IDX: <null>, IDY: 11_#17, iX: <null>, iY: 17 }
    38) { IDX: <null>, IDY: 14_#20, iX: <null>, iY: 20 }
    39) { IDX: <null>, IDY: 14_#21, iX: <null>, iY: 21 }
 2) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: <null>, iX: 0, iY: <null> }
     1) { IDX: 1_#1, IDY: <null>, iX: 1, iY: <null> }
     2) { IDX: _#2, IDY: _#0, iX: 2, iY: 0 }
     3) { IDX: _#2, IDY: _#1, iX: 2, iY: 1 }
     4) { IDX: _#2, IDY: _#2, iX: 2, iY: 2 }
     5) { IDX: 4_#3, IDY: <null>, iX: 3, iY: <null> }
     6) { IDX: 6_#4, IDY: <null>, iX: 4, iY: <null> }
     7) { IDX: 7_#5, IDY: <null>, iX: 5, iY: <null> }
     8) { IDX: 9_#6, IDY: <null>, iX: 6, iY: <null> }
     9) { IDX: _#7, IDY: _#0, iX: 7, iY: 0 }
    10) { IDX: _#7, IDY: _#1, iX: 7, iY: 1 }
    11) { IDX: _#7, IDY: _#2, iX: 7, iY: 2 }
    12) { IDX: 12_#8, IDY: <null>, iX: 8, iY: <null> }
    13) { IDX: 13_#9, IDY: <null>, iX: 9, iY: <null> }
    14) { IDX: 15_#10, IDY: <null>, iX: 10, iY: <null> }
    15) { IDX: 16_#11, IDY: <null>, iX: 11, iY: <null> }
    16) { IDX: 18_#12, IDY: <null>, iX: 12, iY: <null> }
    17) { IDX: 19_#13, IDY: <null>, iX: 13, iY: <null> }
 3) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: <null>, iX: 0, iY: <null> }
     1) { IDX: 1_#1, IDY: <null>, iX: 1, iY: <null> }
     2) { IDX: _#2, IDY: <null>, iX: 2, iY: <null> }
     3) { IDX: 4_#3, IDY: <null>, iX: 3, iY: <null> }
     4) { IDX: 6_#4, IDY: <null>, iX: 4, iY: <null> }
     5) { IDX: 7_#5, IDY: <null>, iX: 5, iY: <null> }
     6) { IDX: 9_#6, IDY: <null>, iX: 6, iY: <null> }
     7) { IDX: _#7, IDY: <null>, iX: 7, iY: <null> }
     8) { IDX: 12_#8, IDY: 12_#1, iX: 8, iY: 1 }
     9) { IDX: 13_#9, IDY: 13_#2, iX: 9, iY: 2 }
    10) { IDX: 15_#10, IDY: <null>, iX: 10, iY: <null> }
    11) { IDX: 16_#11, IDY: <null>, iX: 11, iY: <null> }
    12) { IDX: 18_#12, IDY: <null>, iX: 12, iY: <null> }
    13) { IDX: 19_#13, IDY: <null>, iX: 13, iY: <null> }
    14) { IDX: <null>, IDY: 11_#0, iX: <null>, iY: 0 }
 4) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: <null>, iX: 0, iY: <null> }
     1) { IDX: 1_#1, IDY: <null>, iX: 1, iY: <null> }
     2) { IDX: _#2, IDY: <null>, iX: 2, iY: <null> }
     3) { IDX: 4_#3, IDY: <null>, iX: 3, iY: <null> }
     4) { IDX: 6_#4, IDY: <null>, iX: 4, iY: <null> }
     5) { IDX: 7_#5, IDY: <null>, iX: 5, iY: <null> }
     6) { IDX: 9_#6, IDY: <null>, iX: 6, iY: <null> }
     7) { IDX: _#7, IDY: <null>, iX: 7, iY: <null> }
     8) { IDX: 12_#8, IDY: <null>, iX: 8, iY: <null> }
     9) { IDX: 13_#9, IDY: <null>, iX: 9, iY: <null> }
    10) { IDX: 15_#10, IDY: <null>, iX: 10, iY: <null> }
    11) { IDX: 16_#11, IDY: <null>, iX: 11, iY: <null> }
    12) { IDX: 18_#12, IDY: <null>, iX: 12, iY: <null> }
    13) { IDX: 19_#13, IDY: <null>, iX: 13, iY: <null> }
 5) <null>
 6) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: 0_#0, iX: 0, iY: 0 }
     1) { IDX: 0_#1, IDY: 0_#0, iX: 1, iY: 0 }
     2) { IDX: 2_#2, IDY: <null>, iX: 2, iY: <null> }
     3) { IDX: 2_#3, IDY: <null>, iX: 3, iY: <null> }
     4) { IDX: _#4, IDY: _#2, iX: 4, iY: 2 }
     5) { IDX: _#4, IDY: _#7, iX: 4, iY: 7 }
     6) { IDX: _#5, IDY: _#2, iX: 5, iY: 2 }
     7) { IDX: _#5, IDY: _#7, iX: 5, iY: 7 }
     8) { IDX: 4_#6, IDY: 4_#3, iX: 6, iY: 3 }
     9) { IDX: 4_#7, IDY: 4_#3, iX: 7, iY: 3 }
    10) { IDX: 6_#8, IDY: 6_#4, iX: 8, iY: 4 }
    11) { IDX: 6_#9, IDY: 6_#4, iX: 9, iY: 4 }
    12) { IDX: 7_#10, IDY: 7_#5, iX: 10, iY: 5 }
    13) { IDX: 7_#11, IDY: 7_#5, iX: 11, iY: 5 }
    14) { IDX: _#12, IDY: _#2, iX: 12, iY: 2 }
    15) { IDX: _#12, IDY: _#7, iX: 12, iY: 7 }
    16) { IDX: _#13, IDY: _#2, iX: 13, iY: 2 }
    17) { IDX: _#13, IDY: _#7, iX: 13, iY: 7 }
    18) { IDX: 10_#14, IDY: <null>, iX: 14, iY: <null> }
    19) { IDX: 10_#15, IDY: <null>, iX: 15, iY: <null> }
    20) { IDX: 11_#16, IDY: <null>, iX: 16, iY: <null> }
    21) { IDX: 11_#17, IDY: <null>, iX: 17, iY: <null> }
    22) { IDX: 12_#18, IDY: 12_#8, iX: 18, iY: 8 }
    23) { IDX: 12_#19, IDY: 12_#8, iX: 19, iY: 8 }
    24) { IDX: 14_#20, IDY: <null>, iX: 20, iY: <null> }
    25) { IDX: 14_#21, IDY: <null>, iX: 21, iY: <null> }
    26) { IDX: 15_#22, IDY: 15_#10, iX: 22, iY: 10 }
    27) { IDX: 15_#23, IDY: 15_#10, iX: 23, iY: 10 }
    28) { IDX: 16_#24, IDY: 16_#11, iX: 24, iY: 11 }
    29) { IDX: 16_#25, IDY: 16_#11, iX: 25, iY: 11 }
    30) { IDX: _#26, IDY: _#2, iX: 26, iY: 2 }
    31) { IDX: _#26, IDY: _#7, iX: 26, iY: 7 }
    32) { IDX: _#27, IDY: _#2, iX: 27, iY: 2 }
    33) { IDX: _#27, IDY: _#7, iX: 27, iY: 7 }
    34) { IDX: 19_#28, IDY: 19_#13, iX: 28, iY: 13 }
    35) { IDX: 19_#29, IDY: 19_#13, iX: 29, iY: 13 }
    36) { IDX: <null>, IDY: 1_#1, iX: <null>, iY: 1 }
    37) { IDX: <null>, IDY: 9_#6, iX: <null>, iY: 6 }
    38) { IDX: <null>, IDY: 13_#9, iX: <null>, iY: 9 }
    39) { IDX: <null>, IDY: 18_#12, iX: <null>, iY: 12 }
 7) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: 0_#0, iX: 0, iY: 0 }
     1) { IDX: 0_#0, IDY: 0_#1, iX: 0, iY: 1 }
     2) { IDX: 0_#1, IDY: 0_#0, iX: 1, iY: 0 }
     3) { IDX: 0_#1, IDY: 0_#1, iX: 1, iY: 1 }
     4) { IDX: 2_#2, IDY: 2_#2, iX: 2, iY: 2 }
     5) { IDX: 2_#2, IDY: 2_#3, iX: 2, iY: 3 }
     6) { IDX: 2_#3, IDY: 2_#2, iX: 3, iY: 2 }
     7) { IDX: 2_#3, IDY: 2_#3, iX: 3, iY: 3 }
     8) { IDX: _#4, IDY: _#4, iX: 4, iY: 4 }
     9) { IDX: _#4, IDY: _#5, iX: 4, iY: 5 }
    10) { IDX: _#4, IDY: _#12, iX: 4, iY: 12 }
    11) { IDX: _#4, IDY: _#13, iX: 4, iY: 13 }
    12) { IDX: _#4, IDY: _#26, iX: 4, iY: 26 }
    13) { IDX: _#4, IDY: _#27, iX: 4, iY: 27 }
    14) { IDX: _#5, IDY: _#4, iX: 5, iY: 4 }
    15) { IDX: _#5, IDY: _#5, iX: 5, iY: 5 }
    16) { IDX: _#5, IDY: _#12, iX: 5, iY: 12 }
    17) { IDX: _#5, IDY: _#13, iX: 5, iY: 13 }
    18) { IDX: _#5, IDY: _#26, iX: 5, iY: 26 }
    19) { IDX: _#5, IDY: _#27, iX: 5, iY: 27 }
    20) { IDX: 4_#6, IDY: 4_#6, iX: 6, iY: 6 }
    21) { IDX: 4_#6, IDY: 4_#7, iX: 6, iY: 7 }
    22) { IDX: 4_#7, IDY: 4_#6, iX: 7, iY: 6 }
    23) { IDX: 4_#7, IDY: 4_#7, iX: 7, iY: 7 }
    24) { IDX: 6_#8, IDY: 6_#8, iX: 8, iY: 8 }
    25) { IDX: 6_#8, IDY: 6_#9, iX: 8, iY: 9 }
    26) { IDX: 6_#9, IDY: 6_#8, iX: 9, iY: 8 }
    27) { IDX: 6_#9, IDY: 6_#9, iX: 9, iY: 9 }
    28) { IDX: 7_#10, IDY: 7_#10, iX: 10, iY: 10 }
    29) { IDX: 7_#10, IDY: 7_#11, iX: 10, iY: 11 }
    30) { IDX: 7_#11, IDY: 7_#10, iX: 11, iY: 10 }
    31) { IDX: 7_#11, IDY: 7_#11, iX: 11, iY: 11 }
    32) { IDX: _#12, IDY: _#4, iX: 12, iY: 4 }
    33) { IDX: _#12, IDY: _#5, iX: 12, iY: 5 }
    34) { IDX: _#12, IDY: _#12, iX: 12, iY: 12 }
    35) { IDX: _#12, IDY: _#13, iX: 12, iY: 13 }
    36) { IDX: _#12, IDY: _#26, iX: 12, iY: 26 }
    37) { IDX: _#12, IDY: _#27, iX: 12, iY: 27 }
    38) { IDX: _#13, IDY: _#4, iX: 13, iY: 4 }
    39) { IDX: _#13, IDY: _#5, iX: 13, iY: 5 }
    40) { IDX: _#13, IDY: _#12, iX: 13, iY: 12 }
    41) { IDX: _#13, IDY: _#13, iX: 13, iY: 13 }
    42) { IDX: _#13, IDY: _#26, iX: 13, iY: 26 }
    43) { IDX: _#13, IDY: _#27, iX: 13, iY: 27 }
    44) { IDX: 10_#14, IDY: 10_#14, iX: 14, iY: 14 }
    45) { IDX: 10_#14, IDY: 10_#15, iX: 14, iY: 15 }
    46) { IDX: 10_#15, IDY: 10_#14, iX: 15, iY: 14 }
    47) { IDX: 10_#15, IDY: 10_#15, iX: 15, iY: 15 }
    48) { IDX: 11_#16, IDY: 11_#16, iX: 16, iY: 16 }
    49) { IDX: 11_#16, IDY: 11_#17, iX: 16, iY: 17 }
    50) { IDX: 11_#17, IDY: 11_#16, iX: 17, iY: 16 }
    51) { IDX: 11_#17, IDY: 11_#17, iX: 17, iY: 17 }
    52) { IDX: 12_#18, IDY: 12_#18, iX: 18, iY: 18 }
    53) { IDX: 12_#18, IDY: 12_#19, iX: 18, iY: 19 }
    54) { IDX: 12_#19, IDY: 12_#18, iX: 19, iY: 18 }
    55) { IDX: 12_#19, IDY: 12_#19, iX: 19, iY: 19 }
    56) { IDX: 14_#20, IDY: 14_#20, iX: 20, iY: 20 }
    57) { IDX: 14_#20, IDY: 14_#21, iX: 20, iY: 21 }
    58) { IDX: 14_#21, IDY: 14_#20, iX: 21, iY: 20 }
    59) { IDX: 14_#21, IDY: 14_#21, iX: 21, iY: 21 }
    60) { IDX: 15_#22, IDY: 15_#22, iX: 22, iY: 22 }
    61) { IDX: 15_#22, IDY: 15_#23, iX: 22, iY: 23 }
    62) { IDX: 15_#23, IDY: 15_#22, iX: 23, iY: 22 }
    63) { IDX: 15_#23, IDY: 15_#23, iX: 23, iY: 23 }
    64) { IDX: 16_#24, IDY: 16_#24, iX: 24, iY: 24 }
    65) { IDX: 16_#24, IDY: 16_#25, iX: 24, iY: 25 }
    66) { IDX: 16_#25, IDY: 16_#24, iX: 25, iY: 24 }
    67) { IDX: 16_#25, IDY: 16_#25, iX: 25, iY: 25 }
    68) { IDX: _#26, IDY: _#4, iX: 26, iY: 4 }
    69) { IDX: _#26, IDY: _#5, iX: 26, iY: 5 }
    70) { IDX: _#26, IDY: _#12, iX: 26, iY: 12 }
    71) { IDX: _#26, IDY: _#13, iX: 26, iY: 13 }
    72) { IDX: _#26, IDY: _#26, iX: 26, iY: 26 }
    73) { IDX: _#26, IDY: _#27, iX: 26, iY: 27 }
    74) { IDX: _#27, IDY: _#4, iX: 27, iY: 4 }
    75) { IDX: _#27, IDY: _#5, iX: 27, iY: 5 }
    76) { IDX: _#27, IDY: _#12, iX: 27, iY: 12 }
    77) { IDX: _#27, IDY: _#13, iX: 27, iY: 13 }
    78) { IDX: _#27, IDY: _#26, iX: 27, iY: 26 }
    79) { IDX: _#27, IDY: _#27, iX: 27, iY: 27 }
    80) { IDX: 19_#28, IDY: 19_#28, iX: 28, iY: 28 }
    81) { IDX: 19_#28, IDY: 19_#29, iX: 28, iY: 29 }
    82) { IDX: 19_#29, IDY: 19_#28, iX: 29, iY: 28 }
    83) { IDX: 19_#29, IDY: 19_#29, iX: 29, iY: 29 }
 8) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: <null>, iX: 0, iY: <null> }
     1) { IDX: 0_#1, IDY: <null>, iX: 1, iY: <null> }
     2) { IDX: 2_#2, IDY: <null>, iX: 2, iY: <null> }
     3) { IDX: 2_#3, IDY: <null>, iX: 3, iY: <null> }
     4) { IDX: _#4, IDY: _#0, iX: 4, iY: 0 }
     5) { IDX: _#4, IDY: _#1, iX: 4, iY: 1 }
     6) { IDX: _#4, IDY: _#2, iX: 4, iY: 2 }
     7) { IDX: _#5, IDY: _#0, iX: 5, iY: 0 }
     8) { IDX: _#5, IDY: _#1, iX: 5, iY: 1 }
     9) { IDX: _#5, IDY: _#2, iX: 5, iY: 2 }
    10) { IDX: 4_#6, IDY: <null>, iX: 6, iY: <null> }
    11) { IDX: 4_#7, IDY: <null>, iX: 7, iY: <null> }
    12) { IDX: 6_#8, IDY: <null>, iX: 8, iY: <null> }
    13) { IDX: 6_#9, IDY: <null>, iX: 9, iY: <null> }
    14) { IDX: 7_#10, IDY: <null>, iX: 10, iY: <null> }
    15) { IDX: 7_#11, IDY: <null>, iX: 11, iY: <null> }
    16) { IDX: _#12, IDY: _#0, iX: 12, iY: 0 }
    17) { IDX: _#12, IDY: _#1, iX: 12, iY: 1 }
    18) { IDX: _#12, IDY: _#2, iX: 12, iY: 2 }
    19) { IDX: _#13, IDY: _#0, iX: 13, iY: 0 }
    20) { IDX: _#13, IDY: _#1, iX: 13, iY: 1 }
    21) { IDX: _#13, IDY: _#2, iX: 13, iY: 2 }
    22) { IDX: 10_#14, IDY: <null>, iX: 14, iY: <null> }
    23) { IDX: 10_#15, IDY: <null>, iX: 15, iY: <null> }
    24) { IDX: 11_#16, IDY: <null>, iX: 16, iY: <null> }
    25) { IDX: 11_#17, IDY: <null>, iX: 17, iY: <null> }
    26) { IDX: 12_#18, IDY: <null>, iX: 18, iY: <null> }
    27) { IDX: 12_#19, IDY: <null>, iX: 19, iY: <null> }
    28) { IDX: 14_#20, IDY: <null>, iX: 20, iY: <null> }
    29) { IDX: 14_#21, IDY: <null>, iX: 21, iY: <null> }
    30) { IDX: 15_#22, IDY: <null>, iX: 22, iY: <null> }
    31) { IDX: 15_#23, IDY: <null>, iX: 23, iY: <null> }
    32) { IDX: 16_#24, IDY: <null>, iX: 24, iY: <null> }
    33) { IDX: 16_#25, IDY: <null>, iX: 25, iY: <null> }
    34) { IDX: _#26, IDY: _#0, iX: 26, iY: 0 }
    35) { IDX: _#26, IDY: _#1, iX: 26, iY: 1 }
    36) { IDX: _#26, IDY: _#2, iX: 26, iY: 2 }
    37) { IDX: _#27, IDY: _#0, iX: 27, iY: 0 }
    38) { IDX: _#27, IDY: _#1, iX: 27, iY: 1 }
    39) { IDX: _#27, IDY: _#2, iX: 27, iY: 2 }
    40) { IDX: 19_#28, IDY: <null>, iX: 28, iY: <null> }
    41) { IDX: 19_#29, IDY: <null>, iX: 29, iY: <null> }
 9) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: <null>, iX: 0, iY: <null> }
     1) { IDX: 0_#1, IDY: <null>, iX: 1, iY: <null> }
     2) { IDX: 2_#2, IDY: <null>, iX: 2, iY: <null> }
     3) { IDX: 2_#3, IDY: <null>, iX: 3, iY: <null> }
     4) { IDX: _#4, IDY: <null>, iX: 4, iY: <null> }
     5) { IDX: _#5, IDY: <null>, iX: 5, iY: <null> }
     6) { IDX: 4_#6, IDY: <null>, iX: 6, iY: <null> }
     7) { IDX: 4_#7, IDY: <null>, iX: 7, iY: <null> }
     8) { IDX: 6_#8, IDY: <null>, iX: 8, iY: <null> }
     9) { IDX: 6_#9, IDY: <null>, iX: 9, iY: <null> }
    10) { IDX: 7_#10, IDY: <null>, iX: 10, iY: <null> }
    11) { IDX: 7_#11, IDY: <null>, iX: 11, iY: <null> }
    12) { IDX: _#12, IDY: <null>, iX: 12, iY: <null> }
    13) { IDX: _#13, IDY: <null>, iX: 13, iY: <null> }
    14) { IDX: 10_#14, IDY: <null>, iX: 14, iY: <null> }
    15) { IDX: 10_#15, IDY: <null>, iX: 15, iY: <null> }
    16) { IDX: 11_#16, IDY: 11_#0, iX: 16, iY: 0 }
    17) { IDX: 11_#17, IDY: 11_#0, iX: 17, iY: 0 }
    18) { IDX: 12_#18, IDY: 12_#1, iX: 18, iY: 1 }
    19) { IDX: 12_#19, IDY: 12_#1, iX: 19, iY: 1 }
    20) { IDX: 14_#20, IDY: <null>, iX: 20, iY: <null> }
    21) { IDX: 14_#21, IDY: <null>, iX: 21, iY: <null> }
    22) { IDX: 15_#22, IDY: <null>, iX: 22, iY: <null> }
    23) { IDX: 15_#23, IDY: <null>, iX: 23, iY: <null> }
    24) { IDX: 16_#24, IDY: <null>, iX: 24, iY: <null> }
    25) { IDX: 16_#25, IDY: <null>, iX: 25, iY: <null> }
    26) { IDX: _#26, IDY: <null>, iX: 26, iY: <null> }
    27) { IDX: _#27, IDY: <null>, iX: 27, iY: <null> }
    28) { IDX: 19_#28, IDY: <null>, iX: 28, iY: <null> }
    29) { IDX: 19_#29, IDY: <null>, iX: 29, iY: <null> }
    30) { IDX: <null>, IDY: 13_#2, iX: <null>, iY: 2 }
10) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: <null>, iX: 0, iY: <null> }
     1) { IDX: 0_#1, IDY: <null>, iX: 1, iY: <null> }
     2) { IDX: 2_#2, IDY: <null>, iX: 2, iY: <null> }
     3) { IDX: 2_#3, IDY: <null>, iX: 3, iY: <null> }
     4) { IDX: _#4, IDY: <null>, iX: 4, iY: <null> }
     5) { IDX: _#5, IDY: <null>, iX: 5, iY: <null> }
     6) { IDX: 4_#6, IDY: <null>, iX: 6, iY: <null> }
     7) { IDX: 4_#7, IDY: <null>, iX: 7, iY: <null> }
     8) { IDX: 6_#8, IDY: <null>, iX: 8, iY: <null> }
     9) { IDX: 6_#9, IDY: <null>, iX: 9, iY: <null> }
    10) { IDX: 7_#10, IDY: <null>, iX: 10, iY: <null> }
    11) { IDX: 7_#11, IDY: <null>, iX: 11, iY: <null> }
    12) { IDX: _#12, IDY: <null>, iX: 12, iY: <null> }
    13) { IDX: _#13, IDY: <null>, iX: 13, iY: <null> }
    14) { IDX: 10_#14, IDY: <null>, iX: 14, iY: <null> }
    15) { IDX: 10_#15, IDY: <null>, iX: 15, iY: <null> }
    16) { IDX: 11_#16, IDY: <null>, iX: 16, iY: <null> }
    17) { IDX: 11_#17, IDY: <null>, iX: 17, iY: <null> }
    18) { IDX: 12_#18, IDY: <null>, iX: 18, iY: <null> }
    19) { IDX: 12_#19, IDY: <null>, iX: 19, iY: <null> }
    20) { IDX: 14_#20, IDY: <null>, iX: 20, iY: <null> }
    21) { IDX: 14_#21, IDY: <null>, iX: 21, iY: <null> }
    22) { IDX: 15_#22, IDY: <null>, iX: 22, iY: <null> }
    23) { IDX: 15_#23, IDY: <null>, iX: 23, iY: <null> }
    24) { IDX: 16_#24, IDY: <null>, iX: 24, iY: <null> }
    25) { IDX: 16_#25, IDY: <null>, iX: 25, iY: <null> }
    26) { IDX: _#26, IDY: <null>, iX: 26, iY: <null> }
    27) { IDX: _#27, IDY: <null>, iX: 27, iY: <null> }
    28) { IDX: 19_#28, IDY: <null>, iX: 28, iY: <null> }
    29) { IDX: 19_#29, IDY: <null>, iX: 29, iY: <null> }
11) <null>
12) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: _#0, IDY: _#2, iX: 0, iY: 2 }
     1) { IDX: _#0, IDY: _#7, iX: 0, iY: 7 }
     2) { IDX: _#1, IDY: _#2, iX: 1, iY: 2 }
     3) { IDX: _#1, IDY: _#7, iX: 1, iY: 7 }
     4) { IDX: _#2, IDY: _#2, iX: 2, iY: 2 }
     5) { IDX: _#2, IDY: _#7, iX: 2, iY: 7 }
     6) { IDX: <null>, IDY: 0_#0, iX: <null>, iY: 0 }
     7) { IDX: <null>, IDY: 1_#1, iX: <null>, iY: 1 }
     8) { IDX: <null>, IDY: 4_#3, iX: <null>, iY: 3 }
     9) { IDX: <null>, IDY: 6_#4, iX: <null>, iY: 4 }
    10) { IDX: <null>, IDY: 7_#5, iX: <null>, iY: 5 }
    11) { IDX: <null>, IDY: 9_#6, iX: <null>, iY: 6 }
    12) { IDX: <null>, IDY: 12_#8, iX: <null>, iY: 8 }
    13) { IDX: <null>, IDY: 13_#9, iX: <null>, iY: 9 }
    14) { IDX: <null>, IDY: 15_#10, iX: <null>, iY: 10 }
    15) { IDX: <null>, IDY: 16_#11, iX: <null>, iY: 11 }
    16) { IDX: <null>, IDY: 18_#12, iX: <null>, iY: 12 }
    17) { IDX: <null>, IDY: 19_#13, iX: <null>, iY: 13 }
13) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: _#0, IDY: _#4, iX: 0, iY: 4 }
     1) { IDX: _#0, IDY: _#5, iX: 0, iY: 5 }
     2) { IDX: _#0, IDY: _#12, iX: 0, iY: 12 }
     3) { IDX: _#0, IDY: _#13, iX: 0, iY: 13 }
     4) { IDX: _#0, IDY: _#26, iX: 0, iY: 26 }
     5) { IDX: _#0, IDY: _#27, iX: 0, iY: 27 }
     6) { IDX: _#1, IDY: _#4, iX: 1, iY: 4 }
     7) { IDX: _#1, IDY: _#5, iX: 1, iY: 5 }
     8) { IDX: _#1, IDY: _#12, iX: 1, iY: 12 }
     9) { IDX: _#1, IDY: _#13, iX: 1, iY: 13 }
    10) { IDX: _#1, IDY: _#26, iX: 1, iY: 26 }
    11) { IDX: _#1, IDY: _#27, iX: 1, iY: 27 }
    12) { IDX: _#2, IDY: _#4, iX: 2, iY: 4 }
    13) { IDX: _#2, IDY: _#5, iX: 2, iY: 5 }
    14) { IDX: _#2, IDY: _#12, iX: 2, iY: 12 }
    15) { IDX: _#2, IDY: _#13, iX: 2, iY: 13 }
    16) { IDX: _#2, IDY: _#26, iX: 2, iY: 26 }
    17) { IDX: _#2, IDY: _#27, iX: 2, iY: 27 }
    18) { IDX: <null>, IDY: 0_#0, iX: <null>, iY: 0 }
    19) { IDX: <null>, IDY: 0_#1, iX: <null>, iY: 1 }
    20) { IDX: <null>, IDY: 2_#2, iX: <null>, iY: 2 }
    21) { IDX: <null>, IDY: 2_#3, iX: <null>, iY: 3 }
    22) { IDX: <null>, IDY: 4_#6, iX: <null>, iY: 6 }
    23) { IDX: <null>, IDY: 4_#7, iX: <null>, iY: 7 }
    24) { IDX: <null>, IDY: 6_#8, iX: <null>, iY: 8 }
    25) { IDX: <null>, IDY: 6_#9, iX: <null>, iY: 9 }
    26) { IDX: <null>, IDY: 7_#10, iX: <null>, iY: 10 }
    27) { IDX: <null>, IDY: 7_#11, iX: <null>, iY: 11 }
    28) { IDX: <null>, IDY: 10_#14, iX: <null>, iY: 14 }
    29) { IDX: <null>, IDY: 10_#15, iX: <null>, iY: 15 }
    30) { IDX: <null>, IDY: 11_#16, iX: <null>, iY: 16 }
    31) { IDX: <null>, IDY: 11_#17, iX: <null>, iY: 17 }
    32) { IDX: <null>, IDY: 12_#18, iX: <null>, iY: 18 }
    33) { IDX: <null>, IDY: 12_#19, iX: <null>, iY: 19 }
    34) { IDX: <null>, IDY: 14_#20, iX: <null>, iY: 20 }
    35) { IDX: <null>, IDY: 14_#21, iX: <null>, iY: 21 }
    36) { IDX: <null>, IDY: 15_#22, iX: <null>, iY: 22 }
    37) { IDX: <null>, IDY: 15_#23, iX: <null>, iY: 23 }
    38) { IDX: <null>, IDY: 16_#24, iX: <null>, iY: 24 }
    39) { IDX: <null>, IDY: 16_#25, iX: <null>, iY: 25 }
    40) { IDX: <null>, IDY: 19_#28, iX: <null>, iY: 28 }
    41) { IDX: <null>, IDY: 19_#29, iX: <null>, iY: 29 }
14) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: _#0, IDY: _#0, iX: 0, iY: 0 }
     1) { IDX: _#0, IDY: _#1, iX: 0, iY: 1 }
     2) { IDX: _#0, IDY: _#2, iX: 0, iY: 2 }
     3) { IDX: _#1, IDY: _#0, iX: 1, iY: 0 }
     4) { IDX: _#1, IDY: _#1, iX: 1, iY: 1 }
     5) { IDX: _#1, IDY: _#2, iX: 1, iY: 2 }
     6) { IDX: _#2, IDY: _#0, iX: 2, iY: 0 }
     7) { IDX: _#2, IDY: _#1, iX: 2, iY: 1 }
     8) { IDX: _#2, IDY: _#2, iX: 2, iY: 2 }
15) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: _#0, IDY: <null>, iX: 0, iY: <null> }
     1) { IDX: _#1, IDY: <null>, iX: 1, iY: <null> }
     2) { IDX: _#2, IDY: <null>, iX: 2, iY: <null> }
     3) { IDX: <null>, IDY: 11_#0, iX: <null>, iY: 0 }
     4) { IDX: <null>, IDY: 12_#1, iX: <null>, iY: 1 }
     5) { IDX: <null>, IDY: 13_#2, iX: <null>, iY: 2 }
16) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: _#0, IDY: <null>, iX: 0, iY: <null> }
     1) { IDX: _#1, IDY: <null>, iX: 1, iY: <null> }
     2) { IDX: _#2, IDY: <null>, iX: 2, iY: <null> }
17) <null>
18) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 11_#0, IDY: <null>, iX: 0, iY: <null> }
     1) { IDX: 12_#1, IDY: 12_#8, iX: 1, iY: 8 }
     2) { IDX: 13_#2, IDY: 13_#9, iX: 2, iY: 9 }
     3) { IDX: <null>, IDY: 0_#0, iX: <null>, iY: 0 }
     4) { IDX: <null>, IDY: 1_#1, iX: <null>, iY: 1 }
     5) { IDX: <null>, IDY: _#2, iX: <null>, iY: 2 }
     6) { IDX: <null>, IDY: 4_#3, iX: <null>, iY: 3 }
     7) { IDX: <null>, IDY: 6_#4, iX: <null>, iY: 4 }
     8) { IDX: <null>, IDY: 7_#5, iX: <null>, iY: 5 }
     9) { IDX: <null>, IDY: 9_#6, iX: <null>, iY: 6 }
    10) { IDX: <null>, IDY: _#7, iX: <null>, iY: 7 }
    11) { IDX: <null>, IDY: 15_#10, iX: <null>, iY: 10 }
    12) { IDX: <null>, IDY: 16_#11, iX: <null>, iY: 11 }
    13) { IDX: <null>, IDY: 18_#12, iX: <null>, iY: 12 }
    14) { IDX: <null>, IDY: 19_#13, iX: <null>, iY: 13 }
19) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 11_#0, IDY: 11_#16, iX: 0, iY: 16 }
     1) { IDX: 11_#0, IDY: 11_#17, iX: 0, iY: 17 }
     2) { IDX: 12_#1, IDY: 12_#18, iX: 1, iY: 18 }
     3) { IDX: 12_#1, IDY: 12_#19, iX: 1, iY: 19 }
     4) { IDX: 13_#2, IDY: <null>, iX: 2, iY: <null> }
     5) { IDX: <null>, IDY: 0_#0, iX: <null>, iY: 0 }
     6) { IDX: <null>, IDY: 0_#1, iX: <null>, iY: 1 }
     7) { IDX: <null>, IDY: 2_#2, iX: <null>, iY: 2 }
     8) { IDX: <null>, IDY: 2_#3, iX: <null>, iY: 3 }
     9) { IDX: <null>, IDY: _#4, iX: <null>, iY: 4 }
    10) { IDX: <null>, IDY: _#5, iX: <null>, iY: 5 }
    11) { IDX: <null>, IDY: 4_#6, iX: <null>, iY: 6 }
    12) { IDX: <null>, IDY: 4_#7, iX: <null>, iY: 7 }
    13) { IDX: <null>, IDY: 6_#8, iX: <null>, iY: 8 }
    14) { IDX: <null>, IDY: 6_#9, iX: <null>, iY: 9 }
    15) { IDX: <null>, IDY: 7_#10, iX: <null>, iY: 10 }
    16) { IDX: <null>, IDY: 7_#11, iX: <null>, iY: 11 }
    17) { IDX: <null>, IDY: _#12, iX: <null>, iY: 12 }
    18) { IDX: <null>, IDY: _#13, iX: <null>, iY: 13 }
    19) { IDX: <null>, IDY: 10_#14, iX: <null>, iY: 14 }
    20) { IDX: <null>, IDY: 10_#15, iX: <null>, iY: 15 }
    21) { IDX: <null>, IDY: 14_#20, iX: <null>, iY: 20 }
    22) { IDX: <null>, IDY: 14_#21, iX: <null>, iY: 21 }
    23) { IDX: <null>, IDY: 15_#22, iX: <null>, iY: 22 }
    24) { IDX: <null>, IDY: 15_#23, iX: <null>, iY: 23 }
    25) { IDX: <null>, IDY: 16_#24, iX: <null>, iY: 24 }
    26) { IDX: <null>, IDY: 16_#25, iX: <null>, iY: 25 }
    27) { IDX: <null>, IDY: _#26, iX: <null>, iY: 26 }
    28) { IDX: <null>, IDY: _#27, iX: <null>, iY: 27 }
    29) { IDX: <null>, IDY: 19_#28, iX: <null>, iY: 28 }
    30) { IDX: <null>, IDY: 19_#29, iX: <null>, iY: 29 }
20) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 11_#0, IDY: <null>, iX: 0, iY: <null> }
     1) { IDX: 12_#1, IDY: <null>, iX: 1, iY: <null> }
     2) { IDX: 13_#2, IDY: <null>, iX: 2, iY: <null> }
     3) { IDX: <null>, IDY: _#0, iX: <null>, iY: 0 }
     4) { IDX: <null>, IDY: _#1, iX: <null>, iY: 1 }
     5) { IDX: <null>, IDY: _#2, iX: <null>, iY: 2 }
21) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 11_#0, IDY: 11_#0, iX: 0, iY: 0 }
     1) { IDX: 12_#1, IDY: 12_#1, iX: 1, iY: 1 }
     2) { IDX: 13_#2, IDY: 13_#2, iX: 2, iY: 2 }
22) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 11_#0, IDY: <null>, iX: 0, iY: <null> }
     1) { IDX: 12_#1, IDY: <null>, iX: 1, iY: <null> }
     2) { IDX: 13_#2, IDY: <null>, iX: 2, iY: <null> }
23) <null>
24) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: <null>, IDY: 0_#0, iX: <null>, iY: 0 }
     1) { IDX: <null>, IDY: 1_#1, iX: <null>, iY: 1 }
     2) { IDX: <null>, IDY: _#2, iX: <null>, iY: 2 }
     3) { IDX: <null>, IDY: 4_#3, iX: <null>, iY: 3 }
     4) { IDX: <null>, IDY: 6_#4, iX: <null>, iY: 4 }
     5) { IDX: <null>, IDY: 7_#5, iX: <null>, iY: 5 }
     6) { IDX: <null>, IDY: 9_#6, iX: <null>, iY: 6 }
     7) { IDX: <null>, IDY: _#7, iX: <null>, iY: 7 }
     8) { IDX: <null>, IDY: 12_#8, iX: <null>, iY: 8 }
     9) { IDX: <null>, IDY: 13_#9, iX: <null>, iY: 9 }
    10) { IDX: <null>, IDY: 15_#10, iX: <null>, iY: 10 }
    11) { IDX: <null>, IDY: 16_#11, iX: <null>, iY: 11 }
    12) { IDX: <null>, IDY: 18_#12, iX: <null>, iY: 12 }
    13) { IDX: <null>, IDY: 19_#13, iX: <null>, iY: 13 }
25) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: <null>, IDY: 0_#0, iX: <null>, iY: 0 }
     1) { IDX: <null>, IDY: 0_#1, iX: <null>, iY: 1 }
     2) { IDX: <null>, IDY: 2_#2, iX: <null>, iY: 2 }
     3) { IDX: <null>, IDY: 2_#3, iX: <null>, iY: 3 }
     4) { IDX: <null>, IDY: _#4, iX: <null>, iY: 4 }
     5) { IDX: <null>, IDY: _#5, iX: <null>, iY: 5 }
     6) { IDX: <null>, IDY: 4_#6, iX: <null>, iY: 6 }
     7) { IDX: <null>, IDY: 4_#7, iX: <null>, iY: 7 }
     8) { IDX: <null>, IDY: 6_#8, iX: <null>, iY: 8 }
     9) { IDX: <null>, IDY: 6_#9, iX: <null>, iY: 9 }
    10) { IDX: <null>, IDY: 7_#10, iX: <null>, iY: 10 }
    11) { IDX: <null>, IDY: 7_#11, iX: <null>, iY: 11 }
    12) { IDX: <null>, IDY: _#12, iX: <null>, iY: 12 }
    13) { IDX: <null>, IDY: _#13, iX: <null>, iY: 13 }
    14) { IDX: <null>, IDY: 10_#14, iX: <null>, iY: 14 }
    15) { IDX: <null>, IDY: 10_#15, iX: <null>, iY: 15 }
    16) { IDX: <null>, IDY: 11_#16, iX: <null>, iY: 16 }
    17) { IDX: <null>, IDY: 11_#17, iX: <null>, iY: 17 }
    18) { IDX: <null>, IDY: 12_#18, iX: <null>, iY: 18 }
    19) { IDX: <null>, IDY: 12_#19, iX: <null>, iY: 19 }
    20) { IDX: <null>, IDY: 14_#20, iX: <null>, iY: 20 }
    21) { IDX: <null>, IDY: 14_#21, iX: <null>, iY: 21 }
    22) { IDX: <null>, IDY: 15_#22, iX: <null>, iY: 22 }
    23) { IDX: <null>, IDY: 15_#23, iX: <null>, iY: 23 }
    24) { IDX: <null>, IDY: 16_#24, iX: <null>, iY: 24 }
    25) { IDX: <null>, IDY: 16_#25, iX: <null>, iY: 25 }
    26) { IDX: <null>, IDY: _#26, iX: <null>, iY: 26 }
    27) { IDX: <null>, IDY: _#27, iX: <null>, iY: 27 }
    28) { IDX: <null>, IDY: 19_#28, iX: <null>, iY: 28 }
    29) { IDX: <null>, IDY: 19_#29, iX: <null>, iY: 29 }
26) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: <null>, IDY: _#0, iX: <null>, iY: 0 }
     1) { IDX: <null>, IDY: _#1, iX: <null>, iY: 1 }
     2) { IDX: <null>, IDY: _#2, iX: <null>, iY: 2 }
27) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: <null>, IDY: 11_#0, iX: <null>, iY: 0 }
     1) { IDX: <null>, IDY: 12_#1, iX: <null>, iY: 1 }
     2) { IDX: <null>, IDY: 13_#2, iX: <null>, iY: 2 }
28) Sequence: Seq<{str,str,i8,i8}>
29) <null>
30) <null>
31) <null>
32) <null>
33) <null>
34) <null>
35) <null>
*** Ctx ping count: 3074
    [0:2](3025=275+2750): CrossJoin(*4: *1x, *6: *2x, Test.Wrap(*4.V @= *6.V), Ref<{IDX:s, IDY:s, iX:i8?, iY:i8?}>({IDX:*4.ID, IDY:*6.ID, iX:#3, iY:#5}), {IDX:*4.ID, iX:Opt<i8?>(#3)[, IDY:str(<null>), iY:null:i8?]}, {IDY:*6.ID, iY:Opt<i8?>(#5)[, IDX:str(<null>), iX:null:i8?]})
    [2:4](49=7+42): CrossJoin(*1: XSi, *2: YSi, true, CrossJoin(*4: *1, *6: *2, Test.Wrap(*4.V @= *6.V), Ref<{IDX:s, IDY:s, iX:i8?, iY:i8?}>({IDX:*4.ID, IDY:*6.ID, iX:#3, iY:#5}), {IDX:*4.ID, iX:Opt<i8?>(#3)[, IDY:str(<null>), iY:null:i8?]}, {IDY:*6.ID, iY:Opt<i8?>(#5)[, IDX:str(<null>), iX:null:i8?]}))
###
> CrossJoin(X:XSi, Y:YSi, true, CrossJoin(x:X, y:Y, Wrap(   x.V = y.V), { iX: #x, IDX:x.ID,         IDY:y.ID }, { iX: #, IDX:ID }, {        IDY:ID }))
CrossJoin(X : XSi, Y : YSi, true, CrossJoin(x : X, y : Y, Wrap(x.V @= y.V), { iX : #x, IDX : x.ID, IDY : y.ID }, { iX : #, IDX : ID }, { IDY : ID })) : {IDX:s, IDY:s, iX:i8?}**
BndKind:Call, Type:{IDX:s, IDY:s, iX:i8?}**, Bnd:(Call(∂.CrossJoin([map:1] Global(XSi), [map:2] Global(YSi), true:b, Call(∂.CrossJoin([map:4] Scope(1), [map:5] Scope(2), Call(∂.Test.Wrap(Cmp(GetField(Scope(4), V) @= GetField(Scope(5), V))):b), Ref<{IDX:s, IDY:s, iX:i8?}>({IDX:GetField(Scope(4), ID), IDY:GetField(Scope(5), ID), iX:Scope(3)}), {IDX:GetField(Scope(4), ID), iX:Opt<i8?>(Scope(3))[, IDY:str(<null>)]}, {IDY:GetField(Scope(5), ID)[, IDX:str(<null>), iX:null:i8?]})))))
// (<ctx>, ∂.XSi:{ID:s, V:i8?}**, ∂.YSi:{ID:s, V:i8?}**) : {IDX:s, IDY:s, iX:i8?}**
CrossJoin_2(Arr<obj>, Seq<{str,i8}>, Seq<{str,i8}>):bool
      1) ldc.i4.1
      1) ret
  Total Size: 2

CrossJoin_2(Arr<obj>, i8, {str,i8}, i8, {str,i8}):bool
      1) ldarg.2 [{str,i8}]
      1) dup
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      5) ldfld {str,i8}::_F1:i8
      5) newobj Opt<i8>(i8)
      5) br [1]
  Label [0]:
      1) pop
      5) call static CodeGenUtil::GetDefault():Opt<i8>
  Label [1]:
      1) stloc.0 [Opt<i8>]
      2) ldarg.s [{str,i8} (4)]
      1) dup
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [2]
      5) ldfld {str,i8}::_F1:i8
      5) newobj Opt<i8>(i8)
      5) br [3]
  Label [2]:
      1) pop
      5) call static CodeGenUtil::GetDefault():Opt<i8>
  Label [3]:
      1) stloc.1 [Opt<i8>]
      2) ldloca.s [Opt<i8> (0)]
      5) call Opt<i8>::get_HasValue():bool
      2) ldloca.s [Opt<i8> (1)]
      5) call Opt<i8>::get_HasValue():bool
      5) bne.un [4]
      2) ldloca.s [Opt<i8> (0)]
      5) call Opt<i8>::GetValueOrDefault():i8
      2) ldloca.s [Opt<i8> (1)]
      5) call Opt<i8>::GetValueOrDefault():i8
      2) ceq
      5) br [5]
  Label [4]:
      1) ldc.i4.0
  Label [5]:
      5) call static WrapFuncGen::Exec(bool):bool
      1) ret
  Total Size: 120

CrossJoin_3(Arr<obj>, i8, {str,i8}, i8, {str,i8}):{str,str,i8}
      5) newobj {str,str,i8}()
      1) dup
      1) ldc.i4.7
      5) stfld {str,str,i8}::_B0:u1
      1) stloc.0 [{str,str,i8}]
      1) ldloc.0 [{str,str,i8}]
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8}::_F0:str
      1) ldloc.0 [{str,str,i8}]
      2) ldarg.s [{str,i8} (4)]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8}::_F1:str
      1) ldloc.0 [{str,str,i8}]
      1) ldarg.1 [i8]
      5) stfld {str,str,i8}::_F2:i8
      1) ldloc.0 [{str,str,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 60

CrossJoin_4(Arr<obj>, i8, {str,i8}):{str,str,i8}
      5) newobj {str,str,i8}()
      1) dup
      1) ldc.i4.3
      5) stfld {str,str,i8}::_B0:u1
      1) stloc.0 [{str,str,i8}]
      1) ldloc.0 [{str,str,i8}]
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8}::_F0:str
      1) ldloc.0 [{str,str,i8}]
      1) ldarg.1 [i8]
      5) stfld {str,str,i8}::_F2:i8
      1) ldloc.0 [{str,str,i8}]
      1) dup
      5) ldfld {str,str,i8}::_B0:u1
      1) ldc.i4.4
      1) or
      5) stfld {str,str,i8}::_B0:u1
      1) ldloc.0 [{str,str,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 61

CrossJoin_5(Arr<obj>, i8, {str,i8}):{str,str,i8}
      5) newobj {str,str,i8}()
      1) dup
      1) ldc.i4.3
      5) stfld {str,str,i8}::_B0:u1
      1) stloc.0 [{str,str,i8}]
      1) ldloc.0 [{str,str,i8}]
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8}::_F1:str
      1) ldloc.0 [{str,str,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 40

CrossJoin_3(Arr<obj>, Seq<{str,i8}>, Seq<{str,i8}>):Seq<{str,str,i8}>
      1) ldarg.1 [Seq<{str,i8}>]
      1) ldarg.2 [Seq<{str,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<i8,{str,i8},i8,{str,i8},bool>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [Func<i8,{str,i8},i8,{str,i8},{str,str,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Func<i8,{str,i8},{str,str,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.3
      5) ldelem [Func<i8,{str,i8},{str,str,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [ExecCtx]
      1) ldc.i4.0
      5) call static CrossJoinGen::ExecInd(Seq<{str,i8}>, Seq<{str,i8}>, Func<i8,{str,i8},i8,{str,i8},bool>, Func<i8,{str,i8},i8,{str,i8},{str,str,i8}>, Func<i8,{str,i8},{str,str,i8}>, Func<i8,{str,i8},{str,str,i8}>, ExecCtx, i4):Seq<{str,str,i8}>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<{str,str,i8}>):Seq<{str,str,i8}>
      1) ret
  Total Size: 73

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):ExecCtx
      1) stloc.0 [ExecCtx]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<Seq<{str,i8}>>
      1) stloc.1 [Seq<Seq<{str,i8}>>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.2
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<Seq<{str,i8}>>
      1) stloc.2 [Seq<Seq<{str,i8}>>]
      1) ldloc.1 [Seq<Seq<{str,i8}>>]
      1) ldloc.2 [Seq<Seq<{str,i8}>>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<Seq<{str,i8}>,Seq<{str,i8}>,bool>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [MethodInfo]
      5) ldtoken [Func<Seq<{str,i8}>,Seq<{str,i8}>,Seq<{str,str,i8}>>]
      5) call static Type::GetTypeFromHandle(RuntimeTypeHandle):Type
      1) ldc.i4.2
      5) newarr [obj]
      1) dup
      1) ldc.i4.0
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Arr<obj>]
      5) stelem [Arr<obj>]
      1) dup
      1) ldc.i4.1
      1) ldloc.0 [ExecCtx]
      5) stelem [ExecCtx]
      5) callvirt DynamicMethod::CreateDelegate(Type, obj):Delegate
      1) ldloc.0 [ExecCtx]
      1) ldc.i4.2
      5) call static CrossJoinGen::Exec(Seq<Seq<{str,i8}>>, Seq<Seq<{str,i8}>>, Func<Seq<{str,i8}>,Seq<{str,i8}>,bool>, Func<Seq<{str,i8}>,Seq<{str,i8}>,Seq<{str,str,i8}>>, ExecCtx, i4):Seq<Seq<{str,str,i8}>>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<Seq<{str,str,i8}>>):Seq<Seq<{str,str,i8}>>
      1) ret
  Total Size: 99

Func sig: (<ctx>:x, XSi:{ID:s, V:i8?}**, YSi:{ID:s, V:i8?}**) to {IDX:s, IDY:s, iX:i8?}**
Sequence: Seq<Seq<{str,str,i8}>>
 0) Sequence: Seq<{str,str,i8}>
     0) { IDX: 0_#0, IDY: 0_#0, iX: 0 }
     1) { IDX: 1_#1, IDY: 1_#1, iX: 1 }
     2) { IDX: _#2, IDY: _#2, iX: 2 }
     3) { IDX: _#2, IDY: _#7, iX: 2 }
     4) { IDX: 4_#3, IDY: 4_#3, iX: 3 }
     5) { IDX: 6_#4, IDY: 6_#4, iX: 4 }
     6) { IDX: 7_#5, IDY: 7_#5, iX: 5 }
     7) { IDX: 9_#6, IDY: 9_#6, iX: 6 }
     8) { IDX: _#7, IDY: _#2, iX: 7 }
     9) { IDX: _#7, IDY: _#7, iX: 7 }
    10) { IDX: 12_#8, IDY: 12_#8, iX: 8 }
    11) { IDX: 13_#9, IDY: 13_#9, iX: 9 }
    12) { IDX: 15_#10, IDY: 15_#10, iX: 10 }
    13) { IDX: 16_#11, IDY: 16_#11, iX: 11 }
    14) { IDX: 18_#12, IDY: 18_#12, iX: 12 }
    15) { IDX: 19_#13, IDY: 19_#13, iX: 13 }
 1) Sequence: Seq<{str,str,i8}>
     0) { IDX: 0_#0, IDY: 0_#0, iX: 0 }
     1) { IDX: 0_#0, IDY: 0_#1, iX: 0 }
     2) { IDX: 1_#1, IDY: <null>, iX: 1 }
     3) { IDX: _#2, IDY: _#4, iX: 2 }
     4) { IDX: _#2, IDY: _#5, iX: 2 }
     5) { IDX: _#2, IDY: _#12, iX: 2 }
     6) { IDX: _#2, IDY: _#13, iX: 2 }
     7) { IDX: _#2, IDY: _#26, iX: 2 }
     8) { IDX: _#2, IDY: _#27, iX: 2 }
     9) { IDX: 4_#3, IDY: 4_#6, iX: 3 }
    10) { IDX: 4_#3, IDY: 4_#7, iX: 3 }
    11) { IDX: 6_#4, IDY: 6_#8, iX: 4 }
    12) { IDX: 6_#4, IDY: 6_#9, iX: 4 }
    13) { IDX: 7_#5, IDY: 7_#10, iX: 5 }
    14) { IDX: 7_#5, IDY: 7_#11, iX: 5 }
    15) { IDX: 9_#6, IDY: <null>, iX: 6 }
    16) { IDX: _#7, IDY: _#4, iX: 7 }
    17) { IDX: _#7, IDY: _#5, iX: 7 }
    18) { IDX: _#7, IDY: _#12, iX: 7 }
    19) { IDX: _#7, IDY: _#13, iX: 7 }
    20) { IDX: _#7, IDY: _#26, iX: 7 }
    21) { IDX: _#7, IDY: _#27, iX: 7 }
    22) { IDX: 12_#8, IDY: 12_#18, iX: 8 }
    23) { IDX: 12_#8, IDY: 12_#19, iX: 8 }
    24) { IDX: 13_#9, IDY: <null>, iX: 9 }
    25) { IDX: 15_#10, IDY: 15_#22, iX: 10 }
    26) { IDX: 15_#10, IDY: 15_#23, iX: 10 }
    27) { IDX: 16_#11, IDY: 16_#24, iX: 11 }
    28) { IDX: 16_#11, IDY: 16_#25, iX: 11 }
    29) { IDX: 18_#12, IDY: <null>, iX: 12 }
    30) { IDX: 19_#13, IDY: 19_#28, iX: 13 }
    31) { IDX: 19_#13, IDY: 19_#29, iX: 13 }
    32) { IDX: <null>, IDY: 2_#2, iX: <null> }
    33) { IDX: <null>, IDY: 2_#3, iX: <null> }
    34) { IDX: <null>, IDY: 10_#14, iX: <null> }
    35) { IDX: <null>, IDY: 10_#15, iX: <null> }
    36) { IDX: <null>, IDY: 11_#16, iX: <null> }
    37) { IDX: <null>, IDY: 11_#17, iX: <null> }
    38) { IDX: <null>, IDY: 14_#20, iX: <null> }
    39) { IDX: <null>, IDY: 14_#21, iX: <null> }
 2) Sequence: Seq<{str,str,i8}>
     0) { IDX: 0_#0, IDY: <null>, iX: 0 }
     1) { IDX: 1_#1, IDY: <null>, iX: 1 }
     2) { IDX: _#2, IDY: _#0, iX: 2 }
     3) { IDX: _#2, IDY: _#1, iX: 2 }
     4) { IDX: _#2, IDY: _#2, iX: 2 }
     5) { IDX: 4_#3, IDY: <null>, iX: 3 }
     6) { IDX: 6_#4, IDY: <null>, iX: 4 }
     7) { IDX: 7_#5, IDY: <null>, iX: 5 }
     8) { IDX: 9_#6, IDY: <null>, iX: 6 }
     9) { IDX: _#7, IDY: _#0, iX: 7 }
    10) { IDX: _#7, IDY: _#1, iX: 7 }
    11) { IDX: _#7, IDY: _#2, iX: 7 }
    12) { IDX: 12_#8, IDY: <null>, iX: 8 }
    13) { IDX: 13_#9, IDY: <null>, iX: 9 }
    14) { IDX: 15_#10, IDY: <null>, iX: 10 }
    15) { IDX: 16_#11, IDY: <null>, iX: 11 }
    16) { IDX: 18_#12, IDY: <null>, iX: 12 }
    17) { IDX: 19_#13, IDY: <null>, iX: 13 }
 3) Sequence: Seq<{str,str,i8}>
     0) { IDX: 0_#0, IDY: <null>, iX: 0 }
     1) { IDX: 1_#1, IDY: <null>, iX: 1 }
     2) { IDX: _#2, IDY: <null>, iX: 2 }
     3) { IDX: 4_#3, IDY: <null>, iX: 3 }
     4) { IDX: 6_#4, IDY: <null>, iX: 4 }
     5) { IDX: 7_#5, IDY: <null>, iX: 5 }
     6) { IDX: 9_#6, IDY: <null>, iX: 6 }
     7) { IDX: _#7, IDY: <null>, iX: 7 }
     8) { IDX: 12_#8, IDY: 12_#1, iX: 8 }
     9) { IDX: 13_#9, IDY: 13_#2, iX: 9 }
    10) { IDX: 15_#10, IDY: <null>, iX: 10 }
    11) { IDX: 16_#11, IDY: <null>, iX: 11 }
    12) { IDX: 18_#12, IDY: <null>, iX: 12 }
    13) { IDX: 19_#13, IDY: <null>, iX: 13 }
    14) { IDX: <null>, IDY: 11_#0, iX: <null> }
 4) Sequence: Seq<{str,str,i8}>
     0) { IDX: 0_#0, IDY: <null>, iX: 0 }
     1) { IDX: 1_#1, IDY: <null>, iX: 1 }
     2) { IDX: _#2, IDY: <null>, iX: 2 }
     3) { IDX: 4_#3, IDY: <null>, iX: 3 }
     4) { IDX: 6_#4, IDY: <null>, iX: 4 }
     5) { IDX: 7_#5, IDY: <null>, iX: 5 }
     6) { IDX: 9_#6, IDY: <null>, iX: 6 }
     7) { IDX: _#7, IDY: <null>, iX: 7 }
     8) { IDX: 12_#8, IDY: <null>, iX: 8 }
     9) { IDX: 13_#9, IDY: <null>, iX: 9 }
    10) { IDX: 15_#10, IDY: <null>, iX: 10 }
    11) { IDX: 16_#11, IDY: <null>, iX: 11 }
    12) { IDX: 18_#12, IDY: <null>, iX: 12 }
    13) { IDX: 19_#13, IDY: <null>, iX: 13 }
 5) <null>
 6) Sequence: Seq<{str,str,i8}>
     0) { IDX: 0_#0, IDY: 0_#0, iX: 0 }
     1) { IDX: 0_#1, IDY: 0_#0, iX: 1 }
     2) { IDX: 2_#2, IDY: <null>, iX: 2 }
     3) { IDX: 2_#3, IDY: <null>, iX: 3 }
     4) { IDX: _#4, IDY: _#2, iX: 4 }
     5) { IDX: _#4, IDY: _#7, iX: 4 }
     6) { IDX: _#5, IDY: _#2, iX: 5 }
     7) { IDX: _#5, IDY: _#7, iX: 5 }
     8) { IDX: 4_#6, IDY: 4_#3, iX: 6 }
     9) { IDX: 4_#7, IDY: 4_#3, iX: 7 }
    10) { IDX: 6_#8, IDY: 6_#4, iX: 8 }
    11) { IDX: 6_#9, IDY: 6_#4, iX: 9 }
    12) { IDX: 7_#10, IDY: 7_#5, iX: 10 }
    13) { IDX: 7_#11, IDY: 7_#5, iX: 11 }
    14) { IDX: _#12, IDY: _#2, iX: 12 }
    15) { IDX: _#12, IDY: _#7, iX: 12 }
    16) { IDX: _#13, IDY: _#2, iX: 13 }
    17) { IDX: _#13, IDY: _#7, iX: 13 }
    18) { IDX: 10_#14, IDY: <null>, iX: 14 }
    19) { IDX: 10_#15, IDY: <null>, iX: 15 }
    20) { IDX: 11_#16, IDY: <null>, iX: 16 }
    21) { IDX: 11_#17, IDY: <null>, iX: 17 }
    22) { IDX: 12_#18, IDY: 12_#8, iX: 18 }
    23) { IDX: 12_#19, IDY: 12_#8, iX: 19 }
    24) { IDX: 14_#20, IDY: <null>, iX: 20 }
    25) { IDX: 14_#21, IDY: <null>, iX: 21 }
    26) { IDX: 15_#22, IDY: 15_#10, iX: 22 }
    27) { IDX: 15_#23, IDY: 15_#10, iX: 23 }
    28) { IDX: 16_#24, IDY: 16_#11, iX: 24 }
    29) { IDX: 16_#25, IDY: 16_#11, iX: 25 }
    30) { IDX: _#26, IDY: _#2, iX: 26 }
    31) { IDX: _#26, IDY: _#7, iX: 26 }
    32) { IDX: _#27, IDY: _#2, iX: 27 }
    33) { IDX: _#27, IDY: _#7, iX: 27 }
    34) { IDX: 19_#28, IDY: 19_#13, iX: 28 }
    35) { IDX: 19_#29, IDY: 19_#13, iX: 29 }
    36) { IDX: <null>, IDY: 1_#1, iX: <null> }
    37) { IDX: <null>, IDY: 9_#6, iX: <null> }
    38) { IDX: <null>, IDY: 13_#9, iX: <null> }
    39) { IDX: <null>, IDY: 18_#12, iX: <null> }
 7) Sequence: Seq<{str,str,i8}>
     0) { IDX: 0_#0, IDY: 0_#0, iX: 0 }
     1) { IDX: 0_#0, IDY: 0_#1, iX: 0 }
     2) { IDX: 0_#1, IDY: 0_#0, iX: 1 }
     3) { IDX: 0_#1, IDY: 0_#1, iX: 1 }
     4) { IDX: 2_#2, IDY: 2_#2, iX: 2 }
     5) { IDX: 2_#2, IDY: 2_#3, iX: 2 }
     6) { IDX: 2_#3, IDY: 2_#2, iX: 3 }
     7) { IDX: 2_#3, IDY: 2_#3, iX: 3 }
     8) { IDX: _#4, IDY: _#4, iX: 4 }
     9) { IDX: _#4, IDY: _#5, iX: 4 }
    10) { IDX: _#4, IDY: _#12, iX: 4 }
    11) { IDX: _#4, IDY: _#13, iX: 4 }
    12) { IDX: _#4, IDY: _#26, iX: 4 }
    13) { IDX: _#4, IDY: _#27, iX: 4 }
    14) { IDX: _#5, IDY: _#4, iX: 5 }
    15) { IDX: _#5, IDY: _#5, iX: 5 }
    16) { IDX: _#5, IDY: _#12, iX: 5 }
    17) { IDX: _#5, IDY: _#13, iX: 5 }
    18) { IDX: _#5, IDY: _#26, iX: 5 }
    19) { IDX: _#5, IDY: _#27, iX: 5 }
    20) { IDX: 4_#6, IDY: 4_#6, iX: 6 }
    21) { IDX: 4_#6, IDY: 4_#7, iX: 6 }
    22) { IDX: 4_#7, IDY: 4_#6, iX: 7 }
    23) { IDX: 4_#7, IDY: 4_#7, iX: 7 }
    24) { IDX: 6_#8, IDY: 6_#8, iX: 8 }
    25) { IDX: 6_#8, IDY: 6_#9, iX: 8 }
    26) { IDX: 6_#9, IDY: 6_#8, iX: 9 }
    27) { IDX: 6_#9, IDY: 6_#9, iX: 9 }
    28) { IDX: 7_#10, IDY: 7_#10, iX: 10 }
    29) { IDX: 7_#10, IDY: 7_#11, iX: 10 }
    30) { IDX: 7_#11, IDY: 7_#10, iX: 11 }
    31) { IDX: 7_#11, IDY: 7_#11, iX: 11 }
    32) { IDX: _#12, IDY: _#4, iX: 12 }
    33) { IDX: _#12, IDY: _#5, iX: 12 }
    34) { IDX: _#12, IDY: _#12, iX: 12 }
    35) { IDX: _#12, IDY: _#13, iX: 12 }
    36) { IDX: _#12, IDY: _#26, iX: 12 }
    37) { IDX: _#12, IDY: _#27, iX: 12 }
    38) { IDX: _#13, IDY: _#4, iX: 13 }
    39) { IDX: _#13, IDY: _#5, iX: 13 }
    40) { IDX: _#13, IDY: _#12, iX: 13 }
    41) { IDX: _#13, IDY: _#13, iX: 13 }
    42) { IDX: _#13, IDY: _#26, iX: 13 }
    43) { IDX: _#13, IDY: _#27, iX: 13 }
    44) { IDX: 10_#14, IDY: 10_#14, iX: 14 }
    45) { IDX: 10_#14, IDY: 10_#15, iX: 14 }
    46) { IDX: 10_#15, IDY: 10_#14, iX: 15 }
    47) { IDX: 10_#15, IDY: 10_#15, iX: 15 }
    48) { IDX: 11_#16, IDY: 11_#16, iX: 16 }
    49) { IDX: 11_#16, IDY: 11_#17, iX: 16 }
    50) { IDX: 11_#17, IDY: 11_#16, iX: 17 }
    51) { IDX: 11_#17, IDY: 11_#17, iX: 17 }
    52) { IDX: 12_#18, IDY: 12_#18, iX: 18 }
    53) { IDX: 12_#18, IDY: 12_#19, iX: 18 }
    54) { IDX: 12_#19, IDY: 12_#18, iX: 19 }
    55) { IDX: 12_#19, IDY: 12_#19, iX: 19 }
    56) { IDX: 14_#20, IDY: 14_#20, iX: 20 }
    57) { IDX: 14_#20, IDY: 14_#21, iX: 20 }
    58) { IDX: 14_#21, IDY: 14_#20, iX: 21 }
    59) { IDX: 14_#21, IDY: 14_#21, iX: 21 }
    60) { IDX: 15_#22, IDY: 15_#22, iX: 22 }
    61) { IDX: 15_#22, IDY: 15_#23, iX: 22 }
    62) { IDX: 15_#23, IDY: 15_#22, iX: 23 }
    63) { IDX: 15_#23, IDY: 15_#23, iX: 23 }
    64) { IDX: 16_#24, IDY: 16_#24, iX: 24 }
    65) { IDX: 16_#24, IDY: 16_#25, iX: 24 }
    66) { IDX: 16_#25, IDY: 16_#24, iX: 25 }
    67) { IDX: 16_#25, IDY: 16_#25, iX: 25 }
    68) { IDX: _#26, IDY: _#4, iX: 26 }
    69) { IDX: _#26, IDY: _#5, iX: 26 }
    70) { IDX: _#26, IDY: _#12, iX: 26 }
    71) { IDX: _#26, IDY: _#13, iX: 26 }
    72) { IDX: _#26, IDY: _#26, iX: 26 }
    73) { IDX: _#26, IDY: _#27, iX: 26 }
    74) { IDX: _#27, IDY: _#4, iX: 27 }
    75) { IDX: _#27, IDY: _#5, iX: 27 }
    76) { IDX: _#27, IDY: _#12, iX: 27 }
    77) { IDX: _#27, IDY: _#13, iX: 27 }
    78) { IDX: _#27, IDY: _#26, iX: 27 }
    79) { IDX: _#27, IDY: _#27, iX: 27 }
    80) { IDX: 19_#28, IDY: 19_#28, iX: 28 }
    81) { IDX: 19_#28, IDY: 19_#29, iX: 28 }
    82) { IDX: 19_#29, IDY: 19_#28, iX: 29 }
    83) { IDX: 19_#29, IDY: 19_#29, iX: 29 }
 8) Sequence: Seq<{str,str,i8}>
     0) { IDX: 0_#0, IDY: <null>, iX: 0 }
     1) { IDX: 0_#1, IDY: <null>, iX: 1 }
     2) { IDX: 2_#2, IDY: <null>, iX: 2 }
     3) { IDX: 2_#3, IDY: <null>, iX: 3 }
     4) { IDX: _#4, IDY: _#0, iX: 4 }
     5) { IDX: _#4, IDY: _#1, iX: 4 }
     6) { IDX: _#4, IDY: _#2, iX: 4 }
     7) { IDX: _#5, IDY: _#0, iX: 5 }
     8) { IDX: _#5, IDY: _#1, iX: 5 }
     9) { IDX: _#5, IDY: _#2, iX: 5 }
    10) { IDX: 4_#6, IDY: <null>, iX: 6 }
    11) { IDX: 4_#7, IDY: <null>, iX: 7 }
    12) { IDX: 6_#8, IDY: <null>, iX: 8 }
    13) { IDX: 6_#9, IDY: <null>, iX: 9 }
    14) { IDX: 7_#10, IDY: <null>, iX: 10 }
    15) { IDX: 7_#11, IDY: <null>, iX: 11 }
    16) { IDX: _#12, IDY: _#0, iX: 12 }
    17) { IDX: _#12, IDY: _#1, iX: 12 }
    18) { IDX: _#12, IDY: _#2, iX: 12 }
    19) { IDX: _#13, IDY: _#0, iX: 13 }
    20) { IDX: _#13, IDY: _#1, iX: 13 }
    21) { IDX: _#13, IDY: _#2, iX: 13 }
    22) { IDX: 10_#14, IDY: <null>, iX: 14 }
    23) { IDX: 10_#15, IDY: <null>, iX: 15 }
    24) { IDX: 11_#16, IDY: <null>, iX: 16 }
    25) { IDX: 11_#17, IDY: <null>, iX: 17 }
    26) { IDX: 12_#18, IDY: <null>, iX: 18 }
    27) { IDX: 12_#19, IDY: <null>, iX: 19 }
    28) { IDX: 14_#20, IDY: <null>, iX: 20 }
    29) { IDX: 14_#21, IDY: <null>, iX: 21 }
    30) { IDX: 15_#22, IDY: <null>, iX: 22 }
    31) { IDX: 15_#23, IDY: <null>, iX: 23 }
    32) { IDX: 16_#24, IDY: <null>, iX: 24 }
    33) { IDX: 16_#25, IDY: <null>, iX: 25 }
    34) { IDX: _#26, IDY: _#0, iX: 26 }
    35) { IDX: _#26, IDY: _#1, iX: 26 }
    36) { IDX: _#26, IDY: _#2, iX: 26 }
    37) { IDX: _#27, IDY: _#0, iX: 27 }
    38) { IDX: _#27, IDY: _#1, iX: 27 }
    39) { IDX: _#27, IDY: _#2, iX: 27 }
    40) { IDX: 19_#28, IDY: <null>, iX: 28 }
    41) { IDX: 19_#29, IDY: <null>, iX: 29 }
 9) Sequence: Seq<{str,str,i8}>
     0) { IDX: 0_#0, IDY: <null>, iX: 0 }
     1) { IDX: 0_#1, IDY: <null>, iX: 1 }
     2) { IDX: 2_#2, IDY: <null>, iX: 2 }
     3) { IDX: 2_#3, IDY: <null>, iX: 3 }
     4) { IDX: _#4, IDY: <null>, iX: 4 }
     5) { IDX: _#5, IDY: <null>, iX: 5 }
     6) { IDX: 4_#6, IDY: <null>, iX: 6 }
     7) { IDX: 4_#7, IDY: <null>, iX: 7 }
     8) { IDX: 6_#8, IDY: <null>, iX: 8 }
     9) { IDX: 6_#9, IDY: <null>, iX: 9 }
    10) { IDX: 7_#10, IDY: <null>, iX: 10 }
    11) { IDX: 7_#11, IDY: <null>, iX: 11 }
    12) { IDX: _#12, IDY: <null>, iX: 12 }
    13) { IDX: _#13, IDY: <null>, iX: 13 }
    14) { IDX: 10_#14, IDY: <null>, iX: 14 }
    15) { IDX: 10_#15, IDY: <null>, iX: 15 }
    16) { IDX: 11_#16, IDY: 11_#0, iX: 16 }
    17) { IDX: 11_#17, IDY: 11_#0, iX: 17 }
    18) { IDX: 12_#18, IDY: 12_#1, iX: 18 }
    19) { IDX: 12_#19, IDY: 12_#1, iX: 19 }
    20) { IDX: 14_#20, IDY: <null>, iX: 20 }
    21) { IDX: 14_#21, IDY: <null>, iX: 21 }
    22) { IDX: 15_#22, IDY: <null>, iX: 22 }
    23) { IDX: 15_#23, IDY: <null>, iX: 23 }
    24) { IDX: 16_#24, IDY: <null>, iX: 24 }
    25) { IDX: 16_#25, IDY: <null>, iX: 25 }
    26) { IDX: _#26, IDY: <null>, iX: 26 }
    27) { IDX: _#27, IDY: <null>, iX: 27 }
    28) { IDX: 19_#28, IDY: <null>, iX: 28 }
    29) { IDX: 19_#29, IDY: <null>, iX: 29 }
    30) { IDX: <null>, IDY: 13_#2, iX: <null> }
10) Sequence: Seq<{str,str,i8}>
     0) { IDX: 0_#0, IDY: <null>, iX: 0 }
     1) { IDX: 0_#1, IDY: <null>, iX: 1 }
     2) { IDX: 2_#2, IDY: <null>, iX: 2 }
     3) { IDX: 2_#3, IDY: <null>, iX: 3 }
     4) { IDX: _#4, IDY: <null>, iX: 4 }
     5) { IDX: _#5, IDY: <null>, iX: 5 }
     6) { IDX: 4_#6, IDY: <null>, iX: 6 }
     7) { IDX: 4_#7, IDY: <null>, iX: 7 }
     8) { IDX: 6_#8, IDY: <null>, iX: 8 }
     9) { IDX: 6_#9, IDY: <null>, iX: 9 }
    10) { IDX: 7_#10, IDY: <null>, iX: 10 }
    11) { IDX: 7_#11, IDY: <null>, iX: 11 }
    12) { IDX: _#12, IDY: <null>, iX: 12 }
    13) { IDX: _#13, IDY: <null>, iX: 13 }
    14) { IDX: 10_#14, IDY: <null>, iX: 14 }
    15) { IDX: 10_#15, IDY: <null>, iX: 15 }
    16) { IDX: 11_#16, IDY: <null>, iX: 16 }
    17) { IDX: 11_#17, IDY: <null>, iX: 17 }
    18) { IDX: 12_#18, IDY: <null>, iX: 18 }
    19) { IDX: 12_#19, IDY: <null>, iX: 19 }
    20) { IDX: 14_#20, IDY: <null>, iX: 20 }
    21) { IDX: 14_#21, IDY: <null>, iX: 21 }
    22) { IDX: 15_#22, IDY: <null>, iX: 22 }
    23) { IDX: 15_#23, IDY: <null>, iX: 23 }
    24) { IDX: 16_#24, IDY: <null>, iX: 24 }
    25) { IDX: 16_#25, IDY: <null>, iX: 25 }
    26) { IDX: _#26, IDY: <null>, iX: 26 }
    27) { IDX: _#27, IDY: <null>, iX: 27 }
    28) { IDX: 19_#28, IDY: <null>, iX: 28 }
    29) { IDX: 19_#29, IDY: <null>, iX: 29 }
11) <null>
12) Sequence: Seq<{str,str,i8}>
     0) { IDX: _#0, IDY: _#2, iX: 0 }
     1) { IDX: _#0, IDY: _#7, iX: 0 }
     2) { IDX: _#1, IDY: _#2, iX: 1 }
     3) { IDX: _#1, IDY: _#7, iX: 1 }
     4) { IDX: _#2, IDY: _#2, iX: 2 }
     5) { IDX: _#2, IDY: _#7, iX: 2 }
     6) { IDX: <null>, IDY: 0_#0, iX: <null> }
     7) { IDX: <null>, IDY: 1_#1, iX: <null> }
     8) { IDX: <null>, IDY: 4_#3, iX: <null> }
     9) { IDX: <null>, IDY: 6_#4, iX: <null> }
    10) { IDX: <null>, IDY: 7_#5, iX: <null> }
    11) { IDX: <null>, IDY: 9_#6, iX: <null> }
    12) { IDX: <null>, IDY: 12_#8, iX: <null> }
    13) { IDX: <null>, IDY: 13_#9, iX: <null> }
    14) { IDX: <null>, IDY: 15_#10, iX: <null> }
    15) { IDX: <null>, IDY: 16_#11, iX: <null> }
    16) { IDX: <null>, IDY: 18_#12, iX: <null> }
    17) { IDX: <null>, IDY: 19_#13, iX: <null> }
13) Sequence: Seq<{str,str,i8}>
     0) { IDX: _#0, IDY: _#4, iX: 0 }
     1) { IDX: _#0, IDY: _#5, iX: 0 }
     2) { IDX: _#0, IDY: _#12, iX: 0 }
     3) { IDX: _#0, IDY: _#13, iX: 0 }
     4) { IDX: _#0, IDY: _#26, iX: 0 }
     5) { IDX: _#0, IDY: _#27, iX: 0 }
     6) { IDX: _#1, IDY: _#4, iX: 1 }
     7) { IDX: _#1, IDY: _#5, iX: 1 }
     8) { IDX: _#1, IDY: _#12, iX: 1 }
     9) { IDX: _#1, IDY: _#13, iX: 1 }
    10) { IDX: _#1, IDY: _#26, iX: 1 }
    11) { IDX: _#1, IDY: _#27, iX: 1 }
    12) { IDX: _#2, IDY: _#4, iX: 2 }
    13) { IDX: _#2, IDY: _#5, iX: 2 }
    14) { IDX: _#2, IDY: _#12, iX: 2 }
    15) { IDX: _#2, IDY: _#13, iX: 2 }
    16) { IDX: _#2, IDY: _#26, iX: 2 }
    17) { IDX: _#2, IDY: _#27, iX: 2 }
    18) { IDX: <null>, IDY: 0_#0, iX: <null> }
    19) { IDX: <null>, IDY: 0_#1, iX: <null> }
    20) { IDX: <null>, IDY: 2_#2, iX: <null> }
    21) { IDX: <null>, IDY: 2_#3, iX: <null> }
    22) { IDX: <null>, IDY: 4_#6, iX: <null> }
    23) { IDX: <null>, IDY: 4_#7, iX: <null> }
    24) { IDX: <null>, IDY: 6_#8, iX: <null> }
    25) { IDX: <null>, IDY: 6_#9, iX: <null> }
    26) { IDX: <null>, IDY: 7_#10, iX: <null> }
    27) { IDX: <null>, IDY: 7_#11, iX: <null> }
    28) { IDX: <null>, IDY: 10_#14, iX: <null> }
    29) { IDX: <null>, IDY: 10_#15, iX: <null> }
    30) { IDX: <null>, IDY: 11_#16, iX: <null> }
    31) { IDX: <null>, IDY: 11_#17, iX: <null> }
    32) { IDX: <null>, IDY: 12_#18, iX: <null> }
    33) { IDX: <null>, IDY: 12_#19, iX: <null> }
    34) { IDX: <null>, IDY: 14_#20, iX: <null> }
    35) { IDX: <null>, IDY: 14_#21, iX: <null> }
    36) { IDX: <null>, IDY: 15_#22, iX: <null> }
    37) { IDX: <null>, IDY: 15_#23, iX: <null> }
    38) { IDX: <null>, IDY: 16_#24, iX: <null> }
    39) { IDX: <null>, IDY: 16_#25, iX: <null> }
    40) { IDX: <null>, IDY: 19_#28, iX: <null> }
    41) { IDX: <null>, IDY: 19_#29, iX: <null> }
14) Sequence: Seq<{str,str,i8}>
     0) { IDX: _#0, IDY: _#0, iX: 0 }
     1) { IDX: _#0, IDY: _#1, iX: 0 }
     2) { IDX: _#0, IDY: _#2, iX: 0 }
     3) { IDX: _#1, IDY: _#0, iX: 1 }
     4) { IDX: _#1, IDY: _#1, iX: 1 }
     5) { IDX: _#1, IDY: _#2, iX: 1 }
     6) { IDX: _#2, IDY: _#0, iX: 2 }
     7) { IDX: _#2, IDY: _#1, iX: 2 }
     8) { IDX: _#2, IDY: _#2, iX: 2 }
15) Sequence: Seq<{str,str,i8}>
     0) { IDX: _#0, IDY: <null>, iX: 0 }
     1) { IDX: _#1, IDY: <null>, iX: 1 }
     2) { IDX: _#2, IDY: <null>, iX: 2 }
     3) { IDX: <null>, IDY: 11_#0, iX: <null> }
     4) { IDX: <null>, IDY: 12_#1, iX: <null> }
     5) { IDX: <null>, IDY: 13_#2, iX: <null> }
16) Sequence: Seq<{str,str,i8}>
     0) { IDX: _#0, IDY: <null>, iX: 0 }
     1) { IDX: _#1, IDY: <null>, iX: 1 }
     2) { IDX: _#2, IDY: <null>, iX: 2 }
17) <null>
18) Sequence: Seq<{str,str,i8}>
     0) { IDX: 11_#0, IDY: <null>, iX: 0 }
     1) { IDX: 12_#1, IDY: 12_#8, iX: 1 }
     2) { IDX: 13_#2, IDY: 13_#9, iX: 2 }
     3) { IDX: <null>, IDY: 0_#0, iX: <null> }
     4) { IDX: <null>, IDY: 1_#1, iX: <null> }
     5) { IDX: <null>, IDY: _#2, iX: <null> }
     6) { IDX: <null>, IDY: 4_#3, iX: <null> }
     7) { IDX: <null>, IDY: 6_#4, iX: <null> }
     8) { IDX: <null>, IDY: 7_#5, iX: <null> }
     9) { IDX: <null>, IDY: 9_#6, iX: <null> }
    10) { IDX: <null>, IDY: _#7, iX: <null> }
    11) { IDX: <null>, IDY: 15_#10, iX: <null> }
    12) { IDX: <null>, IDY: 16_#11, iX: <null> }
    13) { IDX: <null>, IDY: 18_#12, iX: <null> }
    14) { IDX: <null>, IDY: 19_#13, iX: <null> }
19) Sequence: Seq<{str,str,i8}>
     0) { IDX: 11_#0, IDY: 11_#16, iX: 0 }
     1) { IDX: 11_#0, IDY: 11_#17, iX: 0 }
     2) { IDX: 12_#1, IDY: 12_#18, iX: 1 }
     3) { IDX: 12_#1, IDY: 12_#19, iX: 1 }
     4) { IDX: 13_#2, IDY: <null>, iX: 2 }
     5) { IDX: <null>, IDY: 0_#0, iX: <null> }
     6) { IDX: <null>, IDY: 0_#1, iX: <null> }
     7) { IDX: <null>, IDY: 2_#2, iX: <null> }
     8) { IDX: <null>, IDY: 2_#3, iX: <null> }
     9) { IDX: <null>, IDY: _#4, iX: <null> }
    10) { IDX: <null>, IDY: _#5, iX: <null> }
    11) { IDX: <null>, IDY: 4_#6, iX: <null> }
    12) { IDX: <null>, IDY: 4_#7, iX: <null> }
    13) { IDX: <null>, IDY: 6_#8, iX: <null> }
    14) { IDX: <null>, IDY: 6_#9, iX: <null> }
    15) { IDX: <null>, IDY: 7_#10, iX: <null> }
    16) { IDX: <null>, IDY: 7_#11, iX: <null> }
    17) { IDX: <null>, IDY: _#12, iX: <null> }
    18) { IDX: <null>, IDY: _#13, iX: <null> }
    19) { IDX: <null>, IDY: 10_#14, iX: <null> }
    20) { IDX: <null>, IDY: 10_#15, iX: <null> }
    21) { IDX: <null>, IDY: 14_#20, iX: <null> }
    22) { IDX: <null>, IDY: 14_#21, iX: <null> }
    23) { IDX: <null>, IDY: 15_#22, iX: <null> }
    24) { IDX: <null>, IDY: 15_#23, iX: <null> }
    25) { IDX: <null>, IDY: 16_#24, iX: <null> }
    26) { IDX: <null>, IDY: 16_#25, iX: <null> }
    27) { IDX: <null>, IDY: _#26, iX: <null> }
    28) { IDX: <null>, IDY: _#27, iX: <null> }
    29) { IDX: <null>, IDY: 19_#28, iX: <null> }
    30) { IDX: <null>, IDY: 19_#29, iX: <null> }
20) Sequence: Seq<{str,str,i8}>
     0) { IDX: 11_#0, IDY: <null>, iX: 0 }
     1) { IDX: 12_#1, IDY: <null>, iX: 1 }
     2) { IDX: 13_#2, IDY: <null>, iX: 2 }
     3) { IDX: <null>, IDY: _#0, iX: <null> }
     4) { IDX: <null>, IDY: _#1, iX: <null> }
     5) { IDX: <null>, IDY: _#2, iX: <null> }
21) Sequence: Seq<{str,str,i8}>
     0) { IDX: 11_#0, IDY: 11_#0, iX: 0 }
     1) { IDX: 12_#1, IDY: 12_#1, iX: 1 }
     2) { IDX: 13_#2, IDY: 13_#2, iX: 2 }
22) Sequence: Seq<{str,str,i8}>
     0) { IDX: 11_#0, IDY: <null>, iX: 0 }
     1) { IDX: 12_#1, IDY: <null>, iX: 1 }
     2) { IDX: 13_#2, IDY: <null>, iX: 2 }
23) <null>
24) Sequence: Seq<{str,str,i8}>
     0) { IDX: <null>, IDY: 0_#0, iX: <null> }
     1) { IDX: <null>, IDY: 1_#1, iX: <null> }
     2) { IDX: <null>, IDY: _#2, iX: <null> }
     3) { IDX: <null>, IDY: 4_#3, iX: <null> }
     4) { IDX: <null>, IDY: 6_#4, iX: <null> }
     5) { IDX: <null>, IDY: 7_#5, iX: <null> }
     6) { IDX: <null>, IDY: 9_#6, iX: <null> }
     7) { IDX: <null>, IDY: _#7, iX: <null> }
     8) { IDX: <null>, IDY: 12_#8, iX: <null> }
     9) { IDX: <null>, IDY: 13_#9, iX: <null> }
    10) { IDX: <null>, IDY: 15_#10, iX: <null> }
    11) { IDX: <null>, IDY: 16_#11, iX: <null> }
    12) { IDX: <null>, IDY: 18_#12, iX: <null> }
    13) { IDX: <null>, IDY: 19_#13, iX: <null> }
25) Sequence: Seq<{str,str,i8}>
     0) { IDX: <null>, IDY: 0_#0, iX: <null> }
     1) { IDX: <null>, IDY: 0_#1, iX: <null> }
     2) { IDX: <null>, IDY: 2_#2, iX: <null> }
     3) { IDX: <null>, IDY: 2_#3, iX: <null> }
     4) { IDX: <null>, IDY: _#4, iX: <null> }
     5) { IDX: <null>, IDY: _#5, iX: <null> }
     6) { IDX: <null>, IDY: 4_#6, iX: <null> }
     7) { IDX: <null>, IDY: 4_#7, iX: <null> }
     8) { IDX: <null>, IDY: 6_#8, iX: <null> }
     9) { IDX: <null>, IDY: 6_#9, iX: <null> }
    10) { IDX: <null>, IDY: 7_#10, iX: <null> }
    11) { IDX: <null>, IDY: 7_#11, iX: <null> }
    12) { IDX: <null>, IDY: _#12, iX: <null> }
    13) { IDX: <null>, IDY: _#13, iX: <null> }
    14) { IDX: <null>, IDY: 10_#14, iX: <null> }
    15) { IDX: <null>, IDY: 10_#15, iX: <null> }
    16) { IDX: <null>, IDY: 11_#16, iX: <null> }
    17) { IDX: <null>, IDY: 11_#17, iX: <null> }
    18) { IDX: <null>, IDY: 12_#18, iX: <null> }
    19) { IDX: <null>, IDY: 12_#19, iX: <null> }
    20) { IDX: <null>, IDY: 14_#20, iX: <null> }
    21) { IDX: <null>, IDY: 14_#21, iX: <null> }
    22) { IDX: <null>, IDY: 15_#22, iX: <null> }
    23) { IDX: <null>, IDY: 15_#23, iX: <null> }
    24) { IDX: <null>, IDY: 16_#24, iX: <null> }
    25) { IDX: <null>, IDY: 16_#25, iX: <null> }
    26) { IDX: <null>, IDY: _#26, iX: <null> }
    27) { IDX: <null>, IDY: _#27, iX: <null> }
    28) { IDX: <null>, IDY: 19_#28, iX: <null> }
    29) { IDX: <null>, IDY: 19_#29, iX: <null> }
26) Sequence: Seq<{str,str,i8}>
     0) { IDX: <null>, IDY: _#0, iX: <null> }
     1) { IDX: <null>, IDY: _#1, iX: <null> }
     2) { IDX: <null>, IDY: _#2, iX: <null> }
27) Sequence: Seq<{str,str,i8}>
     0) { IDX: <null>, IDY: 11_#0, iX: <null> }
     1) { IDX: <null>, IDY: 12_#1, iX: <null> }
     2) { IDX: <null>, IDY: 13_#2, iX: <null> }
28) Sequence: Seq<{str,str,i8}>
29) <null>
30) <null>
31) <null>
32) <null>
33) <null>
34) <null>
35) <null>
*** Ctx ping count: 3074
    [0:2](3025=275+2750): CrossJoin(*4: *1x, *5: *2x, Test.Wrap(*4.V @= *5.V), Ref<{IDX:s, IDY:s, iX:i8?}>({IDX:*4.ID, IDY:*5.ID, iX:#3}), {IDX:*4.ID, iX:Opt<i8?>(#3)[, IDY:str(<null>)]}, {IDY:*5.ID[, IDX:str(<null>), iX:null:i8?]})
    [2:4](49=7+42): CrossJoin(*1: XSi, *2: YSi, true, CrossJoin(*4: *1, *5: *2, Test.Wrap(*4.V @= *5.V), Ref<{IDX:s, IDY:s, iX:i8?}>({IDX:*4.ID, IDY:*5.ID, iX:#3}), {IDX:*4.ID, iX:Opt<i8?>(#3)[, IDY:str(<null>)]}, {IDY:*5.ID[, IDX:str(<null>), iX:null:i8?]}))
###
> CrossJoin(X:XSi, Y:YSi, true, CrossJoin(x:X, y:Y, Wrap(   x.V = y.V), {         IDX:x.ID, iY: #y, IDY:y.ID }, {        IDX:ID }, { iY: #, IDY:ID }))
CrossJoin(X : XSi, Y : YSi, true, CrossJoin(x : X, y : Y, Wrap(x.V @= y.V), { IDX : x.ID, iY : #y, IDY : y.ID }, { IDX : ID }, { iY : #, IDY : ID })) : {IDX:s, IDY:s, iY:i8?}**
BndKind:Call, Type:{IDX:s, IDY:s, iY:i8?}**, Bnd:(Call(∂.CrossJoin([map:1] Global(XSi), [map:2] Global(YSi), true:b, Call(∂.CrossJoin([map:3] Scope(1), [map:5] Scope(2), Call(∂.Test.Wrap(Cmp(GetField(Scope(3), V) @= GetField(Scope(5), V))):b), Ref<{IDX:s, IDY:s, iY:i8?}>({IDX:GetField(Scope(3), ID), IDY:GetField(Scope(5), ID), iY:Scope(4)}), {IDX:GetField(Scope(3), ID)[, IDY:str(<null>), iY:null:i8?]}, {IDY:GetField(Scope(5), ID), iY:Opt<i8?>(Scope(4))[, IDX:str(<null>)]})))))
// (<ctx>, ∂.XSi:{ID:s, V:i8?}**, ∂.YSi:{ID:s, V:i8?}**) : {IDX:s, IDY:s, iY:i8?}**
CrossJoin_2(Arr<obj>, Seq<{str,i8}>, Seq<{str,i8}>):bool
      1) ldc.i4.1
      1) ret
  Total Size: 2

CrossJoin_2(Arr<obj>, i8, {str,i8}, i8, {str,i8}):bool
      1) ldarg.2 [{str,i8}]
      1) dup
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      5) ldfld {str,i8}::_F1:i8
      5) newobj Opt<i8>(i8)
      5) br [1]
  Label [0]:
      1) pop
      5) call static CodeGenUtil::GetDefault():Opt<i8>
  Label [1]:
      1) stloc.0 [Opt<i8>]
      2) ldarg.s [{str,i8} (4)]
      1) dup
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [2]
      5) ldfld {str,i8}::_F1:i8
      5) newobj Opt<i8>(i8)
      5) br [3]
  Label [2]:
      1) pop
      5) call static CodeGenUtil::GetDefault():Opt<i8>
  Label [3]:
      1) stloc.1 [Opt<i8>]
      2) ldloca.s [Opt<i8> (0)]
      5) call Opt<i8>::get_HasValue():bool
      2) ldloca.s [Opt<i8> (1)]
      5) call Opt<i8>::get_HasValue():bool
      5) bne.un [4]
      2) ldloca.s [Opt<i8> (0)]
      5) call Opt<i8>::GetValueOrDefault():i8
      2) ldloca.s [Opt<i8> (1)]
      5) call Opt<i8>::GetValueOrDefault():i8
      2) ceq
      5) br [5]
  Label [4]:
      1) ldc.i4.0
  Label [5]:
      5) call static WrapFuncGen::Exec(bool):bool
      1) ret
  Total Size: 120

CrossJoin_3(Arr<obj>, i8, {str,i8}, i8, {str,i8}):{str,str,i8}
      5) newobj {str,str,i8}()
      1) dup
      1) ldc.i4.7
      5) stfld {str,str,i8}::_B0:u1
      1) stloc.0 [{str,str,i8}]
      1) ldloc.0 [{str,str,i8}]
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8}::_F0:str
      1) ldloc.0 [{str,str,i8}]
      2) ldarg.s [{str,i8} (4)]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8}::_F1:str
      1) ldloc.0 [{str,str,i8}]
      1) ldarg.3 [i8]
      5) stfld {str,str,i8}::_F2:i8
      1) ldloc.0 [{str,str,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 60

CrossJoin_4(Arr<obj>, i8, {str,i8}):{str,str,i8}
      5) newobj {str,str,i8}()
      1) dup
      1) ldc.i4.3
      5) stfld {str,str,i8}::_B0:u1
      1) stloc.0 [{str,str,i8}]
      1) ldloc.0 [{str,str,i8}]
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8}::_F0:str
      1) ldloc.0 [{str,str,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 40

CrossJoin_5(Arr<obj>, i8, {str,i8}):{str,str,i8}
      5) newobj {str,str,i8}()
      1) dup
      1) ldc.i4.3
      5) stfld {str,str,i8}::_B0:u1
      1) stloc.0 [{str,str,i8}]
      1) ldloc.0 [{str,str,i8}]
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8}::_F1:str
      1) ldloc.0 [{str,str,i8}]
      1) ldarg.1 [i8]
      5) stfld {str,str,i8}::_F2:i8
      1) ldloc.0 [{str,str,i8}]
      1) dup
      5) ldfld {str,str,i8}::_B0:u1
      1) ldc.i4.4
      1) or
      5) stfld {str,str,i8}::_B0:u1
      1) ldloc.0 [{str,str,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 61

CrossJoin_3(Arr<obj>, Seq<{str,i8}>, Seq<{str,i8}>):Seq<{str,str,i8}>
      1) ldarg.1 [Seq<{str,i8}>]
      1) ldarg.2 [Seq<{str,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<i8,{str,i8},i8,{str,i8},bool>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [Func<i8,{str,i8},i8,{str,i8},{str,str,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Func<i8,{str,i8},{str,str,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.3
      5) ldelem [Func<i8,{str,i8},{str,str,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [ExecCtx]
      1) ldc.i4.0
      5) call static CrossJoinGen::ExecInd(Seq<{str,i8}>, Seq<{str,i8}>, Func<i8,{str,i8},i8,{str,i8},bool>, Func<i8,{str,i8},i8,{str,i8},{str,str,i8}>, Func<i8,{str,i8},{str,str,i8}>, Func<i8,{str,i8},{str,str,i8}>, ExecCtx, i4):Seq<{str,str,i8}>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<{str,str,i8}>):Seq<{str,str,i8}>
      1) ret
  Total Size: 73

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):ExecCtx
      1) stloc.0 [ExecCtx]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<Seq<{str,i8}>>
      1) stloc.1 [Seq<Seq<{str,i8}>>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.2
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<Seq<{str,i8}>>
      1) stloc.2 [Seq<Seq<{str,i8}>>]
      1) ldloc.1 [Seq<Seq<{str,i8}>>]
      1) ldloc.2 [Seq<Seq<{str,i8}>>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<Seq<{str,i8}>,Seq<{str,i8}>,bool>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [MethodInfo]
      5) ldtoken [Func<Seq<{str,i8}>,Seq<{str,i8}>,Seq<{str,str,i8}>>]
      5) call static Type::GetTypeFromHandle(RuntimeTypeHandle):Type
      1) ldc.i4.2
      5) newarr [obj]
      1) dup
      1) ldc.i4.0
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Arr<obj>]
      5) stelem [Arr<obj>]
      1) dup
      1) ldc.i4.1
      1) ldloc.0 [ExecCtx]
      5) stelem [ExecCtx]
      5) callvirt DynamicMethod::CreateDelegate(Type, obj):Delegate
      1) ldloc.0 [ExecCtx]
      1) ldc.i4.2
      5) call static CrossJoinGen::Exec(Seq<Seq<{str,i8}>>, Seq<Seq<{str,i8}>>, Func<Seq<{str,i8}>,Seq<{str,i8}>,bool>, Func<Seq<{str,i8}>,Seq<{str,i8}>,Seq<{str,str,i8}>>, ExecCtx, i4):Seq<Seq<{str,str,i8}>>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<Seq<{str,str,i8}>>):Seq<Seq<{str,str,i8}>>
      1) ret
  Total Size: 99

Func sig: (<ctx>:x, XSi:{ID:s, V:i8?}**, YSi:{ID:s, V:i8?}**) to {IDX:s, IDY:s, iY:i8?}**
Sequence: Seq<Seq<{str,str,i8}>>
 0) Sequence: Seq<{str,str,i8}>
     0) { IDX: 0_#0, IDY: 0_#0, iY: 0 }
     1) { IDX: 1_#1, IDY: 1_#1, iY: 1 }
     2) { IDX: _#2, IDY: _#2, iY: 2 }
     3) { IDX: _#2, IDY: _#7, iY: 7 }
     4) { IDX: 4_#3, IDY: 4_#3, iY: 3 }
     5) { IDX: 6_#4, IDY: 6_#4, iY: 4 }
     6) { IDX: 7_#5, IDY: 7_#5, iY: 5 }
     7) { IDX: 9_#6, IDY: 9_#6, iY: 6 }
     8) { IDX: _#7, IDY: _#2, iY: 2 }
     9) { IDX: _#7, IDY: _#7, iY: 7 }
    10) { IDX: 12_#8, IDY: 12_#8, iY: 8 }
    11) { IDX: 13_#9, IDY: 13_#9, iY: 9 }
    12) { IDX: 15_#10, IDY: 15_#10, iY: 10 }
    13) { IDX: 16_#11, IDY: 16_#11, iY: 11 }
    14) { IDX: 18_#12, IDY: 18_#12, iY: 12 }
    15) { IDX: 19_#13, IDY: 19_#13, iY: 13 }
 1) Sequence: Seq<{str,str,i8}>
     0) { IDX: 0_#0, IDY: 0_#0, iY: 0 }
     1) { IDX: 0_#0, IDY: 0_#1, iY: 1 }
     2) { IDX: 1_#1, IDY: <null>, iY: <null> }
     3) { IDX: _#2, IDY: _#4, iY: 4 }
     4) { IDX: _#2, IDY: _#5, iY: 5 }
     5) { IDX: _#2, IDY: _#12, iY: 12 }
     6) { IDX: _#2, IDY: _#13, iY: 13 }
     7) { IDX: _#2, IDY: _#26, iY: 26 }
     8) { IDX: _#2, IDY: _#27, iY: 27 }
     9) { IDX: 4_#3, IDY: 4_#6, iY: 6 }
    10) { IDX: 4_#3, IDY: 4_#7, iY: 7 }
    11) { IDX: 6_#4, IDY: 6_#8, iY: 8 }
    12) { IDX: 6_#4, IDY: 6_#9, iY: 9 }
    13) { IDX: 7_#5, IDY: 7_#10, iY: 10 }
    14) { IDX: 7_#5, IDY: 7_#11, iY: 11 }
    15) { IDX: 9_#6, IDY: <null>, iY: <null> }
    16) { IDX: _#7, IDY: _#4, iY: 4 }
    17) { IDX: _#7, IDY: _#5, iY: 5 }
    18) { IDX: _#7, IDY: _#12, iY: 12 }
    19) { IDX: _#7, IDY: _#13, iY: 13 }
    20) { IDX: _#7, IDY: _#26, iY: 26 }
    21) { IDX: _#7, IDY: _#27, iY: 27 }
    22) { IDX: 12_#8, IDY: 12_#18, iY: 18 }
    23) { IDX: 12_#8, IDY: 12_#19, iY: 19 }
    24) { IDX: 13_#9, IDY: <null>, iY: <null> }
    25) { IDX: 15_#10, IDY: 15_#22, iY: 22 }
    26) { IDX: 15_#10, IDY: 15_#23, iY: 23 }
    27) { IDX: 16_#11, IDY: 16_#24, iY: 24 }
    28) { IDX: 16_#11, IDY: 16_#25, iY: 25 }
    29) { IDX: 18_#12, IDY: <null>, iY: <null> }
    30) { IDX: 19_#13, IDY: 19_#28, iY: 28 }
    31) { IDX: 19_#13, IDY: 19_#29, iY: 29 }
    32) { IDX: <null>, IDY: 2_#2, iY: 2 }
    33) { IDX: <null>, IDY: 2_#3, iY: 3 }
    34) { IDX: <null>, IDY: 10_#14, iY: 14 }
    35) { IDX: <null>, IDY: 10_#15, iY: 15 }
    36) { IDX: <null>, IDY: 11_#16, iY: 16 }
    37) { IDX: <null>, IDY: 11_#17, iY: 17 }
    38) { IDX: <null>, IDY: 14_#20, iY: 20 }
    39) { IDX: <null>, IDY: 14_#21, iY: 21 }
 2) Sequence: Seq<{str,str,i8}>
     0) { IDX: 0_#0, IDY: <null>, iY: <null> }
     1) { IDX: 1_#1, IDY: <null>, iY: <null> }
     2) { IDX: _#2, IDY: _#0, iY: 0 }
     3) { IDX: _#2, IDY: _#1, iY: 1 }
     4) { IDX: _#2, IDY: _#2, iY: 2 }
     5) { IDX: 4_#3, IDY: <null>, iY: <null> }
     6) { IDX: 6_#4, IDY: <null>, iY: <null> }
     7) { IDX: 7_#5, IDY: <null>, iY: <null> }
     8) { IDX: 9_#6, IDY: <null>, iY: <null> }
     9) { IDX: _#7, IDY: _#0, iY: 0 }
    10) { IDX: _#7, IDY: _#1, iY: 1 }
    11) { IDX: _#7, IDY: _#2, iY: 2 }
    12) { IDX: 12_#8, IDY: <null>, iY: <null> }
    13) { IDX: 13_#9, IDY: <null>, iY: <null> }
    14) { IDX: 15_#10, IDY: <null>, iY: <null> }
    15) { IDX: 16_#11, IDY: <null>, iY: <null> }
    16) { IDX: 18_#12, IDY: <null>, iY: <null> }
    17) { IDX: 19_#13, IDY: <null>, iY: <null> }
 3) Sequence: Seq<{str,str,i8}>
     0) { IDX: 0_#0, IDY: <null>, iY: <null> }
     1) { IDX: 1_#1, IDY: <null>, iY: <null> }
     2) { IDX: _#2, IDY: <null>, iY: <null> }
     3) { IDX: 4_#3, IDY: <null>, iY: <null> }
     4) { IDX: 6_#4, IDY: <null>, iY: <null> }
     5) { IDX: 7_#5, IDY: <null>, iY: <null> }
     6) { IDX: 9_#6, IDY: <null>, iY: <null> }
     7) { IDX: _#7, IDY: <null>, iY: <null> }
     8) { IDX: 12_#8, IDY: 12_#1, iY: 1 }
     9) { IDX: 13_#9, IDY: 13_#2, iY: 2 }
    10) { IDX: 15_#10, IDY: <null>, iY: <null> }
    11) { IDX: 16_#11, IDY: <null>, iY: <null> }
    12) { IDX: 18_#12, IDY: <null>, iY: <null> }
    13) { IDX: 19_#13, IDY: <null>, iY: <null> }
    14) { IDX: <null>, IDY: 11_#0, iY: 0 }
 4) Sequence: Seq<{str,str,i8}>
     0) { IDX: 0_#0, IDY: <null>, iY: <null> }
     1) { IDX: 1_#1, IDY: <null>, iY: <null> }
     2) { IDX: _#2, IDY: <null>, iY: <null> }
     3) { IDX: 4_#3, IDY: <null>, iY: <null> }
     4) { IDX: 6_#4, IDY: <null>, iY: <null> }
     5) { IDX: 7_#5, IDY: <null>, iY: <null> }
     6) { IDX: 9_#6, IDY: <null>, iY: <null> }
     7) { IDX: _#7, IDY: <null>, iY: <null> }
     8) { IDX: 12_#8, IDY: <null>, iY: <null> }
     9) { IDX: 13_#9, IDY: <null>, iY: <null> }
    10) { IDX: 15_#10, IDY: <null>, iY: <null> }
    11) { IDX: 16_#11, IDY: <null>, iY: <null> }
    12) { IDX: 18_#12, IDY: <null>, iY: <null> }
    13) { IDX: 19_#13, IDY: <null>, iY: <null> }
 5) <null>
 6) Sequence: Seq<{str,str,i8}>
     0) { IDX: 0_#0, IDY: 0_#0, iY: 0 }
     1) { IDX: 0_#1, IDY: 0_#0, iY: 0 }
     2) { IDX: 2_#2, IDY: <null>, iY: <null> }
     3) { IDX: 2_#3, IDY: <null>, iY: <null> }
     4) { IDX: _#4, IDY: _#2, iY: 2 }
     5) { IDX: _#4, IDY: _#7, iY: 7 }
     6) { IDX: _#5, IDY: _#2, iY: 2 }
     7) { IDX: _#5, IDY: _#7, iY: 7 }
     8) { IDX: 4_#6, IDY: 4_#3, iY: 3 }
     9) { IDX: 4_#7, IDY: 4_#3, iY: 3 }
    10) { IDX: 6_#8, IDY: 6_#4, iY: 4 }
    11) { IDX: 6_#9, IDY: 6_#4, iY: 4 }
    12) { IDX: 7_#10, IDY: 7_#5, iY: 5 }
    13) { IDX: 7_#11, IDY: 7_#5, iY: 5 }
    14) { IDX: _#12, IDY: _#2, iY: 2 }
    15) { IDX: _#12, IDY: _#7, iY: 7 }
    16) { IDX: _#13, IDY: _#2, iY: 2 }
    17) { IDX: _#13, IDY: _#7, iY: 7 }
    18) { IDX: 10_#14, IDY: <null>, iY: <null> }
    19) { IDX: 10_#15, IDY: <null>, iY: <null> }
    20) { IDX: 11_#16, IDY: <null>, iY: <null> }
    21) { IDX: 11_#17, IDY: <null>, iY: <null> }
    22) { IDX: 12_#18, IDY: 12_#8, iY: 8 }
    23) { IDX: 12_#19, IDY: 12_#8, iY: 8 }
    24) { IDX: 14_#20, IDY: <null>, iY: <null> }
    25) { IDX: 14_#21, IDY: <null>, iY: <null> }
    26) { IDX: 15_#22, IDY: 15_#10, iY: 10 }
    27) { IDX: 15_#23, IDY: 15_#10, iY: 10 }
    28) { IDX: 16_#24, IDY: 16_#11, iY: 11 }
    29) { IDX: 16_#25, IDY: 16_#11, iY: 11 }
    30) { IDX: _#26, IDY: _#2, iY: 2 }
    31) { IDX: _#26, IDY: _#7, iY: 7 }
    32) { IDX: _#27, IDY: _#2, iY: 2 }
    33) { IDX: _#27, IDY: _#7, iY: 7 }
    34) { IDX: 19_#28, IDY: 19_#13, iY: 13 }
    35) { IDX: 19_#29, IDY: 19_#13, iY: 13 }
    36) { IDX: <null>, IDY: 1_#1, iY: 1 }
    37) { IDX: <null>, IDY: 9_#6, iY: 6 }
    38) { IDX: <null>, IDY: 13_#9, iY: 9 }
    39) { IDX: <null>, IDY: 18_#12, iY: 12 }
 7) Sequence: Seq<{str,str,i8}>
     0) { IDX: 0_#0, IDY: 0_#0, iY: 0 }
     1) { IDX: 0_#0, IDY: 0_#1, iY: 1 }
     2) { IDX: 0_#1, IDY: 0_#0, iY: 0 }
     3) { IDX: 0_#1, IDY: 0_#1, iY: 1 }
     4) { IDX: 2_#2, IDY: 2_#2, iY: 2 }
     5) { IDX: 2_#2, IDY: 2_#3, iY: 3 }
     6) { IDX: 2_#3, IDY: 2_#2, iY: 2 }
     7) { IDX: 2_#3, IDY: 2_#3, iY: 3 }
     8) { IDX: _#4, IDY: _#4, iY: 4 }
     9) { IDX: _#4, IDY: _#5, iY: 5 }
    10) { IDX: _#4, IDY: _#12, iY: 12 }
    11) { IDX: _#4, IDY: _#13, iY: 13 }
    12) { IDX: _#4, IDY: _#26, iY: 26 }
    13) { IDX: _#4, IDY: _#27, iY: 27 }
    14) { IDX: _#5, IDY: _#4, iY: 4 }
    15) { IDX: _#5, IDY: _#5, iY: 5 }
    16) { IDX: _#5, IDY: _#12, iY: 12 }
    17) { IDX: _#5, IDY: _#13, iY: 13 }
    18) { IDX: _#5, IDY: _#26, iY: 26 }
    19) { IDX: _#5, IDY: _#27, iY: 27 }
    20) { IDX: 4_#6, IDY: 4_#6, iY: 6 }
    21) { IDX: 4_#6, IDY: 4_#7, iY: 7 }
    22) { IDX: 4_#7, IDY: 4_#6, iY: 6 }
    23) { IDX: 4_#7, IDY: 4_#7, iY: 7 }
    24) { IDX: 6_#8, IDY: 6_#8, iY: 8 }
    25) { IDX: 6_#8, IDY: 6_#9, iY: 9 }
    26) { IDX: 6_#9, IDY: 6_#8, iY: 8 }
    27) { IDX: 6_#9, IDY: 6_#9, iY: 9 }
    28) { IDX: 7_#10, IDY: 7_#10, iY: 10 }
    29) { IDX: 7_#10, IDY: 7_#11, iY: 11 }
    30) { IDX: 7_#11, IDY: 7_#10, iY: 10 }
    31) { IDX: 7_#11, IDY: 7_#11, iY: 11 }
    32) { IDX: _#12, IDY: _#4, iY: 4 }
    33) { IDX: _#12, IDY: _#5, iY: 5 }
    34) { IDX: _#12, IDY: _#12, iY: 12 }
    35) { IDX: _#12, IDY: _#13, iY: 13 }
    36) { IDX: _#12, IDY: _#26, iY: 26 }
    37) { IDX: _#12, IDY: _#27, iY: 27 }
    38) { IDX: _#13, IDY: _#4, iY: 4 }
    39) { IDX: _#13, IDY: _#5, iY: 5 }
    40) { IDX: _#13, IDY: _#12, iY: 12 }
    41) { IDX: _#13, IDY: _#13, iY: 13 }
    42) { IDX: _#13, IDY: _#26, iY: 26 }
    43) { IDX: _#13, IDY: _#27, iY: 27 }
    44) { IDX: 10_#14, IDY: 10_#14, iY: 14 }
    45) { IDX: 10_#14, IDY: 10_#15, iY: 15 }
    46) { IDX: 10_#15, IDY: 10_#14, iY: 14 }
    47) { IDX: 10_#15, IDY: 10_#15, iY: 15 }
    48) { IDX: 11_#16, IDY: 11_#16, iY: 16 }
    49) { IDX: 11_#16, IDY: 11_#17, iY: 17 }
    50) { IDX: 11_#17, IDY: 11_#16, iY: 16 }
    51) { IDX: 11_#17, IDY: 11_#17, iY: 17 }
    52) { IDX: 12_#18, IDY: 12_#18, iY: 18 }
    53) { IDX: 12_#18, IDY: 12_#19, iY: 19 }
    54) { IDX: 12_#19, IDY: 12_#18, iY: 18 }
    55) { IDX: 12_#19, IDY: 12_#19, iY: 19 }
    56) { IDX: 14_#20, IDY: 14_#20, iY: 20 }
    57) { IDX: 14_#20, IDY: 14_#21, iY: 21 }
    58) { IDX: 14_#21, IDY: 14_#20, iY: 20 }
    59) { IDX: 14_#21, IDY: 14_#21, iY: 21 }
    60) { IDX: 15_#22, IDY: 15_#22, iY: 22 }
    61) { IDX: 15_#22, IDY: 15_#23, iY: 23 }
    62) { IDX: 15_#23, IDY: 15_#22, iY: 22 }
    63) { IDX: 15_#23, IDY: 15_#23, iY: 23 }
    64) { IDX: 16_#24, IDY: 16_#24, iY: 24 }
    65) { IDX: 16_#24, IDY: 16_#25, iY: 25 }
    66) { IDX: 16_#25, IDY: 16_#24, iY: 24 }
    67) { IDX: 16_#25, IDY: 16_#25, iY: 25 }
    68) { IDX: _#26, IDY: _#4, iY: 4 }
    69) { IDX: _#26, IDY: _#5, iY: 5 }
    70) { IDX: _#26, IDY: _#12, iY: 12 }
    71) { IDX: _#26, IDY: _#13, iY: 13 }
    72) { IDX: _#26, IDY: _#26, iY: 26 }
    73) { IDX: _#26, IDY: _#27, iY: 27 }
    74) { IDX: _#27, IDY: _#4, iY: 4 }
    75) { IDX: _#27, IDY: _#5, iY: 5 }
    76) { IDX: _#27, IDY: _#12, iY: 12 }
    77) { IDX: _#27, IDY: _#13, iY: 13 }
    78) { IDX: _#27, IDY: _#26, iY: 26 }
    79) { IDX: _#27, IDY: _#27, iY: 27 }
    80) { IDX: 19_#28, IDY: 19_#28, iY: 28 }
    81) { IDX: 19_#28, IDY: 19_#29, iY: 29 }
    82) { IDX: 19_#29, IDY: 19_#28, iY: 28 }
    83) { IDX: 19_#29, IDY: 19_#29, iY: 29 }
 8) Sequence: Seq<{str,str,i8}>
     0) { IDX: 0_#0, IDY: <null>, iY: <null> }
     1) { IDX: 0_#1, IDY: <null>, iY: <null> }
     2) { IDX: 2_#2, IDY: <null>, iY: <null> }
     3) { IDX: 2_#3, IDY: <null>, iY: <null> }
     4) { IDX: _#4, IDY: _#0, iY: 0 }
     5) { IDX: _#4, IDY: _#1, iY: 1 }
     6) { IDX: _#4, IDY: _#2, iY: 2 }
     7) { IDX: _#5, IDY: _#0, iY: 0 }
     8) { IDX: _#5, IDY: _#1, iY: 1 }
     9) { IDX: _#5, IDY: _#2, iY: 2 }
    10) { IDX: 4_#6, IDY: <null>, iY: <null> }
    11) { IDX: 4_#7, IDY: <null>, iY: <null> }
    12) { IDX: 6_#8, IDY: <null>, iY: <null> }
    13) { IDX: 6_#9, IDY: <null>, iY: <null> }
    14) { IDX: 7_#10, IDY: <null>, iY: <null> }
    15) { IDX: 7_#11, IDY: <null>, iY: <null> }
    16) { IDX: _#12, IDY: _#0, iY: 0 }
    17) { IDX: _#12, IDY: _#1, iY: 1 }
    18) { IDX: _#12, IDY: _#2, iY: 2 }
    19) { IDX: _#13, IDY: _#0, iY: 0 }
    20) { IDX: _#13, IDY: _#1, iY: 1 }
    21) { IDX: _#13, IDY: _#2, iY: 2 }
    22) { IDX: 10_#14, IDY: <null>, iY: <null> }
    23) { IDX: 10_#15, IDY: <null>, iY: <null> }
    24) { IDX: 11_#16, IDY: <null>, iY: <null> }
    25) { IDX: 11_#17, IDY: <null>, iY: <null> }
    26) { IDX: 12_#18, IDY: <null>, iY: <null> }
    27) { IDX: 12_#19, IDY: <null>, iY: <null> }
    28) { IDX: 14_#20, IDY: <null>, iY: <null> }
    29) { IDX: 14_#21, IDY: <null>, iY: <null> }
    30) { IDX: 15_#22, IDY: <null>, iY: <null> }
    31) { IDX: 15_#23, IDY: <null>, iY: <null> }
    32) { IDX: 16_#24, IDY: <null>, iY: <null> }
    33) { IDX: 16_#25, IDY: <null>, iY: <null> }
    34) { IDX: _#26, IDY: _#0, iY: 0 }
    35) { IDX: _#26, IDY: _#1, iY: 1 }
    36) { IDX: _#26, IDY: _#2, iY: 2 }
    37) { IDX: _#27, IDY: _#0, iY: 0 }
    38) { IDX: _#27, IDY: _#1, iY: 1 }
    39) { IDX: _#27, IDY: _#2, iY: 2 }
    40) { IDX: 19_#28, IDY: <null>, iY: <null> }
    41) { IDX: 19_#29, IDY: <null>, iY: <null> }
 9) Sequence: Seq<{str,str,i8}>
     0) { IDX: 0_#0, IDY: <null>, iY: <null> }
     1) { IDX: 0_#1, IDY: <null>, iY: <null> }
     2) { IDX: 2_#2, IDY: <null>, iY: <null> }
     3) { IDX: 2_#3, IDY: <null>, iY: <null> }
     4) { IDX: _#4, IDY: <null>, iY: <null> }
     5) { IDX: _#5, IDY: <null>, iY: <null> }
     6) { IDX: 4_#6, IDY: <null>, iY: <null> }
     7) { IDX: 4_#7, IDY: <null>, iY: <null> }
     8) { IDX: 6_#8, IDY: <null>, iY: <null> }
     9) { IDX: 6_#9, IDY: <null>, iY: <null> }
    10) { IDX: 7_#10, IDY: <null>, iY: <null> }
    11) { IDX: 7_#11, IDY: <null>, iY: <null> }
    12) { IDX: _#12, IDY: <null>, iY: <null> }
    13) { IDX: _#13, IDY: <null>, iY: <null> }
    14) { IDX: 10_#14, IDY: <null>, iY: <null> }
    15) { IDX: 10_#15, IDY: <null>, iY: <null> }
    16) { IDX: 11_#16, IDY: 11_#0, iY: 0 }
    17) { IDX: 11_#17, IDY: 11_#0, iY: 0 }
    18) { IDX: 12_#18, IDY: 12_#1, iY: 1 }
    19) { IDX: 12_#19, IDY: 12_#1, iY: 1 }
    20) { IDX: 14_#20, IDY: <null>, iY: <null> }
    21) { IDX: 14_#21, IDY: <null>, iY: <null> }
    22) { IDX: 15_#22, IDY: <null>, iY: <null> }
    23) { IDX: 15_#23, IDY: <null>, iY: <null> }
    24) { IDX: 16_#24, IDY: <null>, iY: <null> }
    25) { IDX: 16_#25, IDY: <null>, iY: <null> }
    26) { IDX: _#26, IDY: <null>, iY: <null> }
    27) { IDX: _#27, IDY: <null>, iY: <null> }
    28) { IDX: 19_#28, IDY: <null>, iY: <null> }
    29) { IDX: 19_#29, IDY: <null>, iY: <null> }
    30) { IDX: <null>, IDY: 13_#2, iY: 2 }
10) Sequence: Seq<{str,str,i8}>
     0) { IDX: 0_#0, IDY: <null>, iY: <null> }
     1) { IDX: 0_#1, IDY: <null>, iY: <null> }
     2) { IDX: 2_#2, IDY: <null>, iY: <null> }
     3) { IDX: 2_#3, IDY: <null>, iY: <null> }
     4) { IDX: _#4, IDY: <null>, iY: <null> }
     5) { IDX: _#5, IDY: <null>, iY: <null> }
     6) { IDX: 4_#6, IDY: <null>, iY: <null> }
     7) { IDX: 4_#7, IDY: <null>, iY: <null> }
     8) { IDX: 6_#8, IDY: <null>, iY: <null> }
     9) { IDX: 6_#9, IDY: <null>, iY: <null> }
    10) { IDX: 7_#10, IDY: <null>, iY: <null> }
    11) { IDX: 7_#11, IDY: <null>, iY: <null> }
    12) { IDX: _#12, IDY: <null>, iY: <null> }
    13) { IDX: _#13, IDY: <null>, iY: <null> }
    14) { IDX: 10_#14, IDY: <null>, iY: <null> }
    15) { IDX: 10_#15, IDY: <null>, iY: <null> }
    16) { IDX: 11_#16, IDY: <null>, iY: <null> }
    17) { IDX: 11_#17, IDY: <null>, iY: <null> }
    18) { IDX: 12_#18, IDY: <null>, iY: <null> }
    19) { IDX: 12_#19, IDY: <null>, iY: <null> }
    20) { IDX: 14_#20, IDY: <null>, iY: <null> }
    21) { IDX: 14_#21, IDY: <null>, iY: <null> }
    22) { IDX: 15_#22, IDY: <null>, iY: <null> }
    23) { IDX: 15_#23, IDY: <null>, iY: <null> }
    24) { IDX: 16_#24, IDY: <null>, iY: <null> }
    25) { IDX: 16_#25, IDY: <null>, iY: <null> }
    26) { IDX: _#26, IDY: <null>, iY: <null> }
    27) { IDX: _#27, IDY: <null>, iY: <null> }
    28) { IDX: 19_#28, IDY: <null>, iY: <null> }
    29) { IDX: 19_#29, IDY: <null>, iY: <null> }
11) <null>
12) Sequence: Seq<{str,str,i8}>
     0) { IDX: _#0, IDY: _#2, iY: 2 }
     1) { IDX: _#0, IDY: _#7, iY: 7 }
     2) { IDX: _#1, IDY: _#2, iY: 2 }
     3) { IDX: _#1, IDY: _#7, iY: 7 }
     4) { IDX: _#2, IDY: _#2, iY: 2 }
     5) { IDX: _#2, IDY: _#7, iY: 7 }
     6) { IDX: <null>, IDY: 0_#0, iY: 0 }
     7) { IDX: <null>, IDY: 1_#1, iY: 1 }
     8) { IDX: <null>, IDY: 4_#3, iY: 3 }
     9) { IDX: <null>, IDY: 6_#4, iY: 4 }
    10) { IDX: <null>, IDY: 7_#5, iY: 5 }
    11) { IDX: <null>, IDY: 9_#6, iY: 6 }
    12) { IDX: <null>, IDY: 12_#8, iY: 8 }
    13) { IDX: <null>, IDY: 13_#9, iY: 9 }
    14) { IDX: <null>, IDY: 15_#10, iY: 10 }
    15) { IDX: <null>, IDY: 16_#11, iY: 11 }
    16) { IDX: <null>, IDY: 18_#12, iY: 12 }
    17) { IDX: <null>, IDY: 19_#13, iY: 13 }
13) Sequence: Seq<{str,str,i8}>
     0) { IDX: _#0, IDY: _#4, iY: 4 }
     1) { IDX: _#0, IDY: _#5, iY: 5 }
     2) { IDX: _#0, IDY: _#12, iY: 12 }
     3) { IDX: _#0, IDY: _#13, iY: 13 }
     4) { IDX: _#0, IDY: _#26, iY: 26 }
     5) { IDX: _#0, IDY: _#27, iY: 27 }
     6) { IDX: _#1, IDY: _#4, iY: 4 }
     7) { IDX: _#1, IDY: _#5, iY: 5 }
     8) { IDX: _#1, IDY: _#12, iY: 12 }
     9) { IDX: _#1, IDY: _#13, iY: 13 }
    10) { IDX: _#1, IDY: _#26, iY: 26 }
    11) { IDX: _#1, IDY: _#27, iY: 27 }
    12) { IDX: _#2, IDY: _#4, iY: 4 }
    13) { IDX: _#2, IDY: _#5, iY: 5 }
    14) { IDX: _#2, IDY: _#12, iY: 12 }
    15) { IDX: _#2, IDY: _#13, iY: 13 }
    16) { IDX: _#2, IDY: _#26, iY: 26 }
    17) { IDX: _#2, IDY: _#27, iY: 27 }
    18) { IDX: <null>, IDY: 0_#0, iY: 0 }
    19) { IDX: <null>, IDY: 0_#1, iY: 1 }
    20) { IDX: <null>, IDY: 2_#2, iY: 2 }
    21) { IDX: <null>, IDY: 2_#3, iY: 3 }
    22) { IDX: <null>, IDY: 4_#6, iY: 6 }
    23) { IDX: <null>, IDY: 4_#7, iY: 7 }
    24) { IDX: <null>, IDY: 6_#8, iY: 8 }
    25) { IDX: <null>, IDY: 6_#9, iY: 9 }
    26) { IDX: <null>, IDY: 7_#10, iY: 10 }
    27) { IDX: <null>, IDY: 7_#11, iY: 11 }
    28) { IDX: <null>, IDY: 10_#14, iY: 14 }
    29) { IDX: <null>, IDY: 10_#15, iY: 15 }
    30) { IDX: <null>, IDY: 11_#16, iY: 16 }
    31) { IDX: <null>, IDY: 11_#17, iY: 17 }
    32) { IDX: <null>, IDY: 12_#18, iY: 18 }
    33) { IDX: <null>, IDY: 12_#19, iY: 19 }
    34) { IDX: <null>, IDY: 14_#20, iY: 20 }
    35) { IDX: <null>, IDY: 14_#21, iY: 21 }
    36) { IDX: <null>, IDY: 15_#22, iY: 22 }
    37) { IDX: <null>, IDY: 15_#23, iY: 23 }
    38) { IDX: <null>, IDY: 16_#24, iY: 24 }
    39) { IDX: <null>, IDY: 16_#25, iY: 25 }
    40) { IDX: <null>, IDY: 19_#28, iY: 28 }
    41) { IDX: <null>, IDY: 19_#29, iY: 29 }
14) Sequence: Seq<{str,str,i8}>
     0) { IDX: _#0, IDY: _#0, iY: 0 }
     1) { IDX: _#0, IDY: _#1, iY: 1 }
     2) { IDX: _#0, IDY: _#2, iY: 2 }
     3) { IDX: _#1, IDY: _#0, iY: 0 }
     4) { IDX: _#1, IDY: _#1, iY: 1 }
     5) { IDX: _#1, IDY: _#2, iY: 2 }
     6) { IDX: _#2, IDY: _#0, iY: 0 }
     7) { IDX: _#2, IDY: _#1, iY: 1 }
     8) { IDX: _#2, IDY: _#2, iY: 2 }
15) Sequence: Seq<{str,str,i8}>
     0) { IDX: _#0, IDY: <null>, iY: <null> }
     1) { IDX: _#1, IDY: <null>, iY: <null> }
     2) { IDX: _#2, IDY: <null>, iY: <null> }
     3) { IDX: <null>, IDY: 11_#0, iY: 0 }
     4) { IDX: <null>, IDY: 12_#1, iY: 1 }
     5) { IDX: <null>, IDY: 13_#2, iY: 2 }
16) Sequence: Seq<{str,str,i8}>
     0) { IDX: _#0, IDY: <null>, iY: <null> }
     1) { IDX: _#1, IDY: <null>, iY: <null> }
     2) { IDX: _#2, IDY: <null>, iY: <null> }
17) <null>
18) Sequence: Seq<{str,str,i8}>
     0) { IDX: 11_#0, IDY: <null>, iY: <null> }
     1) { IDX: 12_#1, IDY: 12_#8, iY: 8 }
     2) { IDX: 13_#2, IDY: 13_#9, iY: 9 }
     3) { IDX: <null>, IDY: 0_#0, iY: 0 }
     4) { IDX: <null>, IDY: 1_#1, iY: 1 }
     5) { IDX: <null>, IDY: _#2, iY: 2 }
     6) { IDX: <null>, IDY: 4_#3, iY: 3 }
     7) { IDX: <null>, IDY: 6_#4, iY: 4 }
     8) { IDX: <null>, IDY: 7_#5, iY: 5 }
     9) { IDX: <null>, IDY: 9_#6, iY: 6 }
    10) { IDX: <null>, IDY: _#7, iY: 7 }
    11) { IDX: <null>, IDY: 15_#10, iY: 10 }
    12) { IDX: <null>, IDY: 16_#11, iY: 11 }
    13) { IDX: <null>, IDY: 18_#12, iY: 12 }
    14) { IDX: <null>, IDY: 19_#13, iY: 13 }
19) Sequence: Seq<{str,str,i8}>
     0) { IDX: 11_#0, IDY: 11_#16, iY: 16 }
     1) { IDX: 11_#0, IDY: 11_#17, iY: 17 }
     2) { IDX: 12_#1, IDY: 12_#18, iY: 18 }
     3) { IDX: 12_#1, IDY: 12_#19, iY: 19 }
     4) { IDX: 13_#2, IDY: <null>, iY: <null> }
     5) { IDX: <null>, IDY: 0_#0, iY: 0 }
     6) { IDX: <null>, IDY: 0_#1, iY: 1 }
     7) { IDX: <null>, IDY: 2_#2, iY: 2 }
     8) { IDX: <null>, IDY: 2_#3, iY: 3 }
     9) { IDX: <null>, IDY: _#4, iY: 4 }
    10) { IDX: <null>, IDY: _#5, iY: 5 }
    11) { IDX: <null>, IDY: 4_#6, iY: 6 }
    12) { IDX: <null>, IDY: 4_#7, iY: 7 }
    13) { IDX: <null>, IDY: 6_#8, iY: 8 }
    14) { IDX: <null>, IDY: 6_#9, iY: 9 }
    15) { IDX: <null>, IDY: 7_#10, iY: 10 }
    16) { IDX: <null>, IDY: 7_#11, iY: 11 }
    17) { IDX: <null>, IDY: _#12, iY: 12 }
    18) { IDX: <null>, IDY: _#13, iY: 13 }
    19) { IDX: <null>, IDY: 10_#14, iY: 14 }
    20) { IDX: <null>, IDY: 10_#15, iY: 15 }
    21) { IDX: <null>, IDY: 14_#20, iY: 20 }
    22) { IDX: <null>, IDY: 14_#21, iY: 21 }
    23) { IDX: <null>, IDY: 15_#22, iY: 22 }
    24) { IDX: <null>, IDY: 15_#23, iY: 23 }
    25) { IDX: <null>, IDY: 16_#24, iY: 24 }
    26) { IDX: <null>, IDY: 16_#25, iY: 25 }
    27) { IDX: <null>, IDY: _#26, iY: 26 }
    28) { IDX: <null>, IDY: _#27, iY: 27 }
    29) { IDX: <null>, IDY: 19_#28, iY: 28 }
    30) { IDX: <null>, IDY: 19_#29, iY: 29 }
20) Sequence: Seq<{str,str,i8}>
     0) { IDX: 11_#0, IDY: <null>, iY: <null> }
     1) { IDX: 12_#1, IDY: <null>, iY: <null> }
     2) { IDX: 13_#2, IDY: <null>, iY: <null> }
     3) { IDX: <null>, IDY: _#0, iY: 0 }
     4) { IDX: <null>, IDY: _#1, iY: 1 }
     5) { IDX: <null>, IDY: _#2, iY: 2 }
21) Sequence: Seq<{str,str,i8}>
     0) { IDX: 11_#0, IDY: 11_#0, iY: 0 }
     1) { IDX: 12_#1, IDY: 12_#1, iY: 1 }
     2) { IDX: 13_#2, IDY: 13_#2, iY: 2 }
22) Sequence: Seq<{str,str,i8}>
     0) { IDX: 11_#0, IDY: <null>, iY: <null> }
     1) { IDX: 12_#1, IDY: <null>, iY: <null> }
     2) { IDX: 13_#2, IDY: <null>, iY: <null> }
23) <null>
24) Sequence: Seq<{str,str,i8}>
     0) { IDX: <null>, IDY: 0_#0, iY: 0 }
     1) { IDX: <null>, IDY: 1_#1, iY: 1 }
     2) { IDX: <null>, IDY: _#2, iY: 2 }
     3) { IDX: <null>, IDY: 4_#3, iY: 3 }
     4) { IDX: <null>, IDY: 6_#4, iY: 4 }
     5) { IDX: <null>, IDY: 7_#5, iY: 5 }
     6) { IDX: <null>, IDY: 9_#6, iY: 6 }
     7) { IDX: <null>, IDY: _#7, iY: 7 }
     8) { IDX: <null>, IDY: 12_#8, iY: 8 }
     9) { IDX: <null>, IDY: 13_#9, iY: 9 }
    10) { IDX: <null>, IDY: 15_#10, iY: 10 }
    11) { IDX: <null>, IDY: 16_#11, iY: 11 }
    12) { IDX: <null>, IDY: 18_#12, iY: 12 }
    13) { IDX: <null>, IDY: 19_#13, iY: 13 }
25) Sequence: Seq<{str,str,i8}>
     0) { IDX: <null>, IDY: 0_#0, iY: 0 }
     1) { IDX: <null>, IDY: 0_#1, iY: 1 }
     2) { IDX: <null>, IDY: 2_#2, iY: 2 }
     3) { IDX: <null>, IDY: 2_#3, iY: 3 }
     4) { IDX: <null>, IDY: _#4, iY: 4 }
     5) { IDX: <null>, IDY: _#5, iY: 5 }
     6) { IDX: <null>, IDY: 4_#6, iY: 6 }
     7) { IDX: <null>, IDY: 4_#7, iY: 7 }
     8) { IDX: <null>, IDY: 6_#8, iY: 8 }
     9) { IDX: <null>, IDY: 6_#9, iY: 9 }
    10) { IDX: <null>, IDY: 7_#10, iY: 10 }
    11) { IDX: <null>, IDY: 7_#11, iY: 11 }
    12) { IDX: <null>, IDY: _#12, iY: 12 }
    13) { IDX: <null>, IDY: _#13, iY: 13 }
    14) { IDX: <null>, IDY: 10_#14, iY: 14 }
    15) { IDX: <null>, IDY: 10_#15, iY: 15 }
    16) { IDX: <null>, IDY: 11_#16, iY: 16 }
    17) { IDX: <null>, IDY: 11_#17, iY: 17 }
    18) { IDX: <null>, IDY: 12_#18, iY: 18 }
    19) { IDX: <null>, IDY: 12_#19, iY: 19 }
    20) { IDX: <null>, IDY: 14_#20, iY: 20 }
    21) { IDX: <null>, IDY: 14_#21, iY: 21 }
    22) { IDX: <null>, IDY: 15_#22, iY: 22 }
    23) { IDX: <null>, IDY: 15_#23, iY: 23 }
    24) { IDX: <null>, IDY: 16_#24, iY: 24 }
    25) { IDX: <null>, IDY: 16_#25, iY: 25 }
    26) { IDX: <null>, IDY: _#26, iY: 26 }
    27) { IDX: <null>, IDY: _#27, iY: 27 }
    28) { IDX: <null>, IDY: 19_#28, iY: 28 }
    29) { IDX: <null>, IDY: 19_#29, iY: 29 }
26) Sequence: Seq<{str,str,i8}>
     0) { IDX: <null>, IDY: _#0, iY: 0 }
     1) { IDX: <null>, IDY: _#1, iY: 1 }
     2) { IDX: <null>, IDY: _#2, iY: 2 }
27) Sequence: Seq<{str,str,i8}>
     0) { IDX: <null>, IDY: 11_#0, iY: 0 }
     1) { IDX: <null>, IDY: 12_#1, iY: 1 }
     2) { IDX: <null>, IDY: 13_#2, iY: 2 }
28) Sequence: Seq<{str,str,i8}>
29) <null>
30) <null>
31) <null>
32) <null>
33) <null>
34) <null>
35) <null>
*** Ctx ping count: 3074
    [0:2](3025=275+2750): CrossJoin(*3: *1x, *5: *2x, Test.Wrap(*3.V @= *5.V), Ref<{IDX:s, IDY:s, iY:i8?}>({IDX:*3.ID, IDY:*5.ID, iY:#4}), {IDX:*3.ID[, IDY:str(<null>), iY:null:i8?]}, {IDY:*5.ID, iY:Opt<i8?>(#4)[, IDX:str(<null>)]})
    [2:4](49=7+42): CrossJoin(*1: XSi, *2: YSi, true, CrossJoin(*3: *1, *5: *2, Test.Wrap(*3.V @= *5.V), Ref<{IDX:s, IDY:s, iY:i8?}>({IDX:*3.ID, IDY:*5.ID, iY:#4}), {IDX:*3.ID[, IDY:str(<null>), iY:null:i8?]}, {IDY:*5.ID, iY:Opt<i8?>(#4)[, IDX:str(<null>)]}))
###
> CrossJoin(X:XSi, Y:YSi, true,   KeyJoin(x:X, y:Y,      #x + 2,   #y , { iX: #x, IDX:x.ID, iY: #y, IDY:y.ID }))
CrossJoin(X : XSi, Y : YSi, true, KeyJoin(x : X, y : Y, #x + 2, #y, { iX : #x, IDX : x.ID, iY : #y, IDY : y.ID })) : {IDX:s, IDY:s, iX:i8, iY:i8}**
BndKind:Call, Type:{IDX:s, IDY:s, iX:i8, iY:i8}**, Bnd:(Call(∂.CrossJoin([map:1] Global(XSi), [map:2] Global(YSi), true:b, Call(∂.KeyJoin([map:4] Scope(1), [map:6] Scope(2), Add(Scope(3), 2:i8), Scope(5), {IDX:GetField(Scope(4), ID), IDY:GetField(Scope(6), ID), iX:Scope(3), iY:Scope(5)})))))
// (<ctx>, ∂.XSi:{ID:s, V:i8?}**, ∂.YSi:{ID:s, V:i8?}**) : {IDX:s, IDY:s, iX:i8, iY:i8}**
CrossJoin_2(Arr<obj>, Seq<{str,i8}>, Seq<{str,i8}>):bool
      1) ldc.i4.1
      1) ret
  Total Size: 2

KeyJoin_2(Arr<obj>, i8, {str,i8}):i8
      1) ldarg.1 [i8]
      1) ldc.i4.2
      1) conv.i8
      1) add
      1) ret
  Total Size: 5

KeyJoin_3(Arr<obj>, i8, {str,i8}):i8
      1) ldarg.1 [i8]
      1) ret
  Total Size: 2

KeyJoin_4(Arr<obj>, i8, {str,i8}, i8, {str,i8}):{str,str,i8,i8}
      5) newobj {str,str,i8,i8}()
      1) dup
      2) ldc.i4.s [15]
      5) stfld {str,str,i8,i8}::_B0:u1
      1) stloc.0 [{str,str,i8,i8}]
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F0:str
      1) ldloc.0 [{str,str,i8,i8}]
      2) ldarg.s [{str,i8} (4)]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F1:str
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.1 [i8]
      5) stfld {str,str,i8,i8}::_F2:i8
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.3 [i8]
      5) stfld {str,str,i8,i8}::_F3:i8
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 68

CrossJoin_3(Arr<obj>, Seq<{str,i8}>, Seq<{str,i8}>):Seq<{str,str,i8,i8}>
      1) ldarg.1 [Seq<{str,i8}>]
      1) ldarg.2 [Seq<{str,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<i8,{str,i8},i8>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [Func<i8,{str,i8},i8>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Func<i8,{str,i8},i8,{str,i8},{str,str,i8,i8}>]
      1) ldnull
      1) ldnull
      1) ldnull
      1) ldc.i4.0
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [ExecCtx]
      1) ldc.i4.0
      5) call static KeyJoinGen::ExecInd(Seq<{str,i8}>, Seq<{str,i8}>, Func<i8,{str,i8},i8>, Func<i8,{str,i8},i8>, Func<i8,{str,i8},i8,{str,i8},{str,str,i8,i8}>, Func<i8,{str,i8},{str,str,i8,i8}>, Func<i8,{str,i8},{str,str,i8,i8}>, EqualityComparer<i8>, bool, ExecCtx, i4):Seq<{str,str,i8,i8}>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<{str,str,i8,i8}>):Seq<{str,str,i8,i8}>
      1) ret
  Total Size: 64

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):ExecCtx
      1) stloc.0 [ExecCtx]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<Seq<{str,i8}>>
      1) stloc.1 [Seq<Seq<{str,i8}>>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.2
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<Seq<{str,i8}>>
      1) stloc.2 [Seq<Seq<{str,i8}>>]
      1) ldloc.1 [Seq<Seq<{str,i8}>>]
      1) ldloc.2 [Seq<Seq<{str,i8}>>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<Seq<{str,i8}>,Seq<{str,i8}>,bool>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [MethodInfo]
      5) ldtoken [Func<Seq<{str,i8}>,Seq<{str,i8}>,Seq<{str,str,i8,i8}>>]
      5) call static Type::GetTypeFromHandle(RuntimeTypeHandle):Type
      1) ldc.i4.2
      5) newarr [obj]
      1) dup
      1) ldc.i4.0
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Arr<obj>]
      5) stelem [Arr<obj>]
      1) dup
      1) ldc.i4.1
      1) ldloc.0 [ExecCtx]
      5) stelem [ExecCtx]
      5) callvirt DynamicMethod::CreateDelegate(Type, obj):Delegate
      1) ldloc.0 [ExecCtx]
      1) ldc.i4.3
      5) call static CrossJoinGen::Exec(Seq<Seq<{str,i8}>>, Seq<Seq<{str,i8}>>, Func<Seq<{str,i8}>,Seq<{str,i8}>,bool>, Func<Seq<{str,i8}>,Seq<{str,i8}>,Seq<{str,str,i8,i8}>>, ExecCtx, i4):Seq<Seq<{str,str,i8,i8}>>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<Seq<{str,str,i8,i8}>>):Seq<Seq<{str,str,i8,i8}>>
      1) ret
  Total Size: 99

Func sig: (<ctx>:x, XSi:{ID:s, V:i8?}**, YSi:{ID:s, V:i8?}**) to {IDX:s, IDY:s, iX:i8, iY:i8}**
Sequence: Seq<Seq<{str,str,i8,i8}>>
 0) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: _#2, iX: 0, iY: 2 }
     1) { IDX: 1_#1, IDY: 4_#3, iX: 1, iY: 3 }
     2) { IDX: _#2, IDY: 6_#4, iX: 2, iY: 4 }
     3) { IDX: 4_#3, IDY: 7_#5, iX: 3, iY: 5 }
     4) { IDX: 6_#4, IDY: 9_#6, iX: 4, iY: 6 }
     5) { IDX: 7_#5, IDY: _#7, iX: 5, iY: 7 }
     6) { IDX: 9_#6, IDY: 12_#8, iX: 6, iY: 8 }
     7) { IDX: _#7, IDY: 13_#9, iX: 7, iY: 9 }
     8) { IDX: 12_#8, IDY: 15_#10, iX: 8, iY: 10 }
     9) { IDX: 13_#9, IDY: 16_#11, iX: 9, iY: 11 }
    10) { IDX: 15_#10, IDY: 18_#12, iX: 10, iY: 12 }
    11) { IDX: 16_#11, IDY: 19_#13, iX: 11, iY: 13 }
 1) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: 2_#2, iX: 0, iY: 2 }
     1) { IDX: 1_#1, IDY: 2_#3, iX: 1, iY: 3 }
     2) { IDX: _#2, IDY: _#4, iX: 2, iY: 4 }
     3) { IDX: 4_#3, IDY: _#5, iX: 3, iY: 5 }
     4) { IDX: 6_#4, IDY: 4_#6, iX: 4, iY: 6 }
     5) { IDX: 7_#5, IDY: 4_#7, iX: 5, iY: 7 }
     6) { IDX: 9_#6, IDY: 6_#8, iX: 6, iY: 8 }
     7) { IDX: _#7, IDY: 6_#9, iX: 7, iY: 9 }
     8) { IDX: 12_#8, IDY: 7_#10, iX: 8, iY: 10 }
     9) { IDX: 13_#9, IDY: 7_#11, iX: 9, iY: 11 }
    10) { IDX: 15_#10, IDY: _#12, iX: 10, iY: 12 }
    11) { IDX: 16_#11, IDY: _#13, iX: 11, iY: 13 }
    12) { IDX: 18_#12, IDY: 10_#14, iX: 12, iY: 14 }
    13) { IDX: 19_#13, IDY: 10_#15, iX: 13, iY: 15 }
 2) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: _#2, iX: 0, iY: 2 }
 3) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: 13_#2, iX: 0, iY: 2 }
 4) Sequence: Seq<{str,str,i8,i8}>
 5) <null>
 6) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: _#2, iX: 0, iY: 2 }
     1) { IDX: 0_#1, IDY: 4_#3, iX: 1, iY: 3 }
     2) { IDX: 2_#2, IDY: 6_#4, iX: 2, iY: 4 }
     3) { IDX: 2_#3, IDY: 7_#5, iX: 3, iY: 5 }
     4) { IDX: _#4, IDY: 9_#6, iX: 4, iY: 6 }
     5) { IDX: _#5, IDY: _#7, iX: 5, iY: 7 }
     6) { IDX: 4_#6, IDY: 12_#8, iX: 6, iY: 8 }
     7) { IDX: 4_#7, IDY: 13_#9, iX: 7, iY: 9 }
     8) { IDX: 6_#8, IDY: 15_#10, iX: 8, iY: 10 }
     9) { IDX: 6_#9, IDY: 16_#11, iX: 9, iY: 11 }
    10) { IDX: 7_#10, IDY: 18_#12, iX: 10, iY: 12 }
    11) { IDX: 7_#11, IDY: 19_#13, iX: 11, iY: 13 }
 7) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: 2_#2, iX: 0, iY: 2 }
     1) { IDX: 0_#1, IDY: 2_#3, iX: 1, iY: 3 }
     2) { IDX: 2_#2, IDY: _#4, iX: 2, iY: 4 }
     3) { IDX: 2_#3, IDY: _#5, iX: 3, iY: 5 }
     4) { IDX: _#4, IDY: 4_#6, iX: 4, iY: 6 }
     5) { IDX: _#5, IDY: 4_#7, iX: 5, iY: 7 }
     6) { IDX: 4_#6, IDY: 6_#8, iX: 6, iY: 8 }
     7) { IDX: 4_#7, IDY: 6_#9, iX: 7, iY: 9 }
     8) { IDX: 6_#8, IDY: 7_#10, iX: 8, iY: 10 }
     9) { IDX: 6_#9, IDY: 7_#11, iX: 9, iY: 11 }
    10) { IDX: 7_#10, IDY: _#12, iX: 10, iY: 12 }
    11) { IDX: 7_#11, IDY: _#13, iX: 11, iY: 13 }
    12) { IDX: _#12, IDY: 10_#14, iX: 12, iY: 14 }
    13) { IDX: _#13, IDY: 10_#15, iX: 13, iY: 15 }
    14) { IDX: 10_#14, IDY: 11_#16, iX: 14, iY: 16 }
    15) { IDX: 10_#15, IDY: 11_#17, iX: 15, iY: 17 }
    16) { IDX: 11_#16, IDY: 12_#18, iX: 16, iY: 18 }
    17) { IDX: 11_#17, IDY: 12_#19, iX: 17, iY: 19 }
    18) { IDX: 12_#18, IDY: 14_#20, iX: 18, iY: 20 }
    19) { IDX: 12_#19, IDY: 14_#21, iX: 19, iY: 21 }
    20) { IDX: 14_#20, IDY: 15_#22, iX: 20, iY: 22 }
    21) { IDX: 14_#21, IDY: 15_#23, iX: 21, iY: 23 }
    22) { IDX: 15_#22, IDY: 16_#24, iX: 22, iY: 24 }
    23) { IDX: 15_#23, IDY: 16_#25, iX: 23, iY: 25 }
    24) { IDX: 16_#24, IDY: _#26, iX: 24, iY: 26 }
    25) { IDX: 16_#25, IDY: _#27, iX: 25, iY: 27 }
    26) { IDX: _#26, IDY: 19_#28, iX: 26, iY: 28 }
    27) { IDX: _#27, IDY: 19_#29, iX: 27, iY: 29 }
 8) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: _#2, iX: 0, iY: 2 }
 9) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: 13_#2, iX: 0, iY: 2 }
10) Sequence: Seq<{str,str,i8,i8}>
11) <null>
12) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: _#0, IDY: _#2, iX: 0, iY: 2 }
     1) { IDX: _#1, IDY: 4_#3, iX: 1, iY: 3 }
     2) { IDX: _#2, IDY: 6_#4, iX: 2, iY: 4 }
13) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: _#0, IDY: 2_#2, iX: 0, iY: 2 }
     1) { IDX: _#1, IDY: 2_#3, iX: 1, iY: 3 }
     2) { IDX: _#2, IDY: _#4, iX: 2, iY: 4 }
14) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: _#0, IDY: _#2, iX: 0, iY: 2 }
15) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: _#0, IDY: 13_#2, iX: 0, iY: 2 }
16) Sequence: Seq<{str,str,i8,i8}>
17) <null>
18) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 11_#0, IDY: _#2, iX: 0, iY: 2 }
     1) { IDX: 12_#1, IDY: 4_#3, iX: 1, iY: 3 }
     2) { IDX: 13_#2, IDY: 6_#4, iX: 2, iY: 4 }
19) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 11_#0, IDY: 2_#2, iX: 0, iY: 2 }
     1) { IDX: 12_#1, IDY: 2_#3, iX: 1, iY: 3 }
     2) { IDX: 13_#2, IDY: _#4, iX: 2, iY: 4 }
20) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 11_#0, IDY: _#2, iX: 0, iY: 2 }
21) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 11_#0, IDY: 13_#2, iX: 0, iY: 2 }
22) Sequence: Seq<{str,str,i8,i8}>
23) <null>
24) Sequence: Seq<{str,str,i8,i8}>
25) Sequence: Seq<{str,str,i8,i8}>
26) Sequence: Seq<{str,str,i8,i8}>
27) Sequence: Seq<{str,str,i8,i8}>
28) Sequence: Seq<{str,str,i8,i8}>
29) <null>
30) <null>
31) <null>
32) <null>
33) <null>
34) <null>
35) <null>
*** Ctx ping count: 397
    [0:3](348=164+0+184): KeyJoin(*4: *1x, *6: *2x, Add(#3, 2), #5, {IDX:*4.ID, IDY:*6.ID, iX:#3, iY:#5})
    [3:5](49=7+42): CrossJoin(*1: XSi, *2: YSi, true, KeyJoin(*4: *1, *6: *2, Add(#3, 2), #5, {IDX:*4.ID, IDY:*6.ID, iX:#3, iY:#5}))
###
> CrossJoin(X:XSi, Y:YSi, true,   KeyJoin(x:X, y:Y,      #x + 2,   #y , { iX: #x, IDX:x.ID, iY: #y, IDY:y.ID }, { iX: #, IDX:ID }))
CrossJoin(X : XSi, Y : YSi, true, KeyJoin(x : X, y : Y, #x + 2, #y, { iX : #x, IDX : x.ID, iY : #y, IDY : y.ID }, { iX : #, IDX : ID })) : {IDX:s, IDY:s, iX:i8, iY:i8?}**
BndKind:Call, Type:{IDX:s, IDY:s, iX:i8, iY:i8?}**, Bnd:(Call(∂.CrossJoin([map:1] Global(XSi), [map:2] Global(YSi), true:b, Call(∂.KeyJoin([map:4] Scope(1), [map:6] Scope(2), Add(Scope(3), 2:i8), Scope(5), Ref<{IDX:s, IDY:s, iX:i8, iY:i8?}>({IDX:GetField(Scope(4), ID), IDY:GetField(Scope(6), ID), iX:Scope(3), iY:Scope(5)}), {IDX:GetField(Scope(4), ID), iX:Scope(3)[, IDY:str(<null>), iY:null:i8?]})))))
// (<ctx>, ∂.XSi:{ID:s, V:i8?}**, ∂.YSi:{ID:s, V:i8?}**) : {IDX:s, IDY:s, iX:i8, iY:i8?}**
CrossJoin_2(Arr<obj>, Seq<{str,i8}>, Seq<{str,i8}>):bool
      1) ldc.i4.1
      1) ret
  Total Size: 2

KeyJoin_2(Arr<obj>, i8, {str,i8}):i8
      1) ldarg.1 [i8]
      1) ldc.i4.2
      1) conv.i8
      1) add
      1) ret
  Total Size: 5

KeyJoin_3(Arr<obj>, i8, {str,i8}):i8
      1) ldarg.1 [i8]
      1) ret
  Total Size: 2

KeyJoin_4(Arr<obj>, i8, {str,i8}, i8, {str,i8}):{str,str,i8,i8}
      5) newobj {str,str,i8,i8}()
      1) dup
      2) ldc.i4.s [15]
      5) stfld {str,str,i8,i8}::_B0:u1
      1) stloc.0 [{str,str,i8,i8}]
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F0:str
      1) ldloc.0 [{str,str,i8,i8}]
      2) ldarg.s [{str,i8} (4)]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F1:str
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.1 [i8]
      5) stfld {str,str,i8,i8}::_F2:i8
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.3 [i8]
      5) stfld {str,str,i8,i8}::_F3:i8
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 68

KeyJoin_5(Arr<obj>, i8, {str,i8}):{str,str,i8,i8}
      5) newobj {str,str,i8,i8}()
      1) dup
      1) ldc.i4.7
      5) stfld {str,str,i8,i8}::_B0:u1
      1) stloc.0 [{str,str,i8,i8}]
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F0:str
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.1 [i8]
      5) stfld {str,str,i8,i8}::_F2:i8
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 47

CrossJoin_3(Arr<obj>, Seq<{str,i8}>, Seq<{str,i8}>):Seq<{str,str,i8,i8}>
      1) ldarg.1 [Seq<{str,i8}>]
      1) ldarg.2 [Seq<{str,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<i8,{str,i8},i8>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [Func<i8,{str,i8},i8>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Func<i8,{str,i8},i8,{str,i8},{str,str,i8,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.3
      5) ldelem [Func<i8,{str,i8},{str,str,i8,i8}>]
      1) ldnull
      1) ldnull
      1) ldc.i4.0
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [ExecCtx]
      1) ldc.i4.0
      5) call static KeyJoinGen::ExecInd(Seq<{str,i8}>, Seq<{str,i8}>, Func<i8,{str,i8},i8>, Func<i8,{str,i8},i8>, Func<i8,{str,i8},i8,{str,i8},{str,str,i8,i8}>, Func<i8,{str,i8},{str,str,i8,i8}>, Func<i8,{str,i8},{str,str,i8,i8}>, EqualityComparer<i8>, bool, ExecCtx, i4):Seq<{str,str,i8,i8}>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<{str,str,i8,i8}>):Seq<{str,str,i8,i8}>
      1) ret
  Total Size: 76

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):ExecCtx
      1) stloc.0 [ExecCtx]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<Seq<{str,i8}>>
      1) stloc.1 [Seq<Seq<{str,i8}>>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.2
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<Seq<{str,i8}>>
      1) stloc.2 [Seq<Seq<{str,i8}>>]
      1) ldloc.1 [Seq<Seq<{str,i8}>>]
      1) ldloc.2 [Seq<Seq<{str,i8}>>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<Seq<{str,i8}>,Seq<{str,i8}>,bool>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [MethodInfo]
      5) ldtoken [Func<Seq<{str,i8}>,Seq<{str,i8}>,Seq<{str,str,i8,i8}>>]
      5) call static Type::GetTypeFromHandle(RuntimeTypeHandle):Type
      1) ldc.i4.2
      5) newarr [obj]
      1) dup
      1) ldc.i4.0
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Arr<obj>]
      5) stelem [Arr<obj>]
      1) dup
      1) ldc.i4.1
      1) ldloc.0 [ExecCtx]
      5) stelem [ExecCtx]
      5) callvirt DynamicMethod::CreateDelegate(Type, obj):Delegate
      1) ldloc.0 [ExecCtx]
      1) ldc.i4.3
      5) call static CrossJoinGen::Exec(Seq<Seq<{str,i8}>>, Seq<Seq<{str,i8}>>, Func<Seq<{str,i8}>,Seq<{str,i8}>,bool>, Func<Seq<{str,i8}>,Seq<{str,i8}>,Seq<{str,str,i8,i8}>>, ExecCtx, i4):Seq<Seq<{str,str,i8,i8}>>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<Seq<{str,str,i8,i8}>>):Seq<Seq<{str,str,i8,i8}>>
      1) ret
  Total Size: 99

Func sig: (<ctx>:x, XSi:{ID:s, V:i8?}**, YSi:{ID:s, V:i8?}**) to {IDX:s, IDY:s, iX:i8, iY:i8?}**
Sequence: Seq<Seq<{str,str,i8,i8}>>
 0) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: _#2, iX: 0, iY: 2 }
     1) { IDX: 1_#1, IDY: 4_#3, iX: 1, iY: 3 }
     2) { IDX: _#2, IDY: 6_#4, iX: 2, iY: 4 }
     3) { IDX: 4_#3, IDY: 7_#5, iX: 3, iY: 5 }
     4) { IDX: 6_#4, IDY: 9_#6, iX: 4, iY: 6 }
     5) { IDX: 7_#5, IDY: _#7, iX: 5, iY: 7 }
     6) { IDX: 9_#6, IDY: 12_#8, iX: 6, iY: 8 }
     7) { IDX: _#7, IDY: 13_#9, iX: 7, iY: 9 }
     8) { IDX: 12_#8, IDY: 15_#10, iX: 8, iY: 10 }
     9) { IDX: 13_#9, IDY: 16_#11, iX: 9, iY: 11 }
    10) { IDX: 15_#10, IDY: 18_#12, iX: 10, iY: 12 }
    11) { IDX: 16_#11, IDY: 19_#13, iX: 11, iY: 13 }
    12) { IDX: 18_#12, IDY: <null>, iX: 12, iY: <null> }
    13) { IDX: 19_#13, IDY: <null>, iX: 13, iY: <null> }
 1) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: 2_#2, iX: 0, iY: 2 }
     1) { IDX: 1_#1, IDY: 2_#3, iX: 1, iY: 3 }
     2) { IDX: _#2, IDY: _#4, iX: 2, iY: 4 }
     3) { IDX: 4_#3, IDY: _#5, iX: 3, iY: 5 }
     4) { IDX: 6_#4, IDY: 4_#6, iX: 4, iY: 6 }
     5) { IDX: 7_#5, IDY: 4_#7, iX: 5, iY: 7 }
     6) { IDX: 9_#6, IDY: 6_#8, iX: 6, iY: 8 }
     7) { IDX: _#7, IDY: 6_#9, iX: 7, iY: 9 }
     8) { IDX: 12_#8, IDY: 7_#10, iX: 8, iY: 10 }
     9) { IDX: 13_#9, IDY: 7_#11, iX: 9, iY: 11 }
    10) { IDX: 15_#10, IDY: _#12, iX: 10, iY: 12 }
    11) { IDX: 16_#11, IDY: _#13, iX: 11, iY: 13 }
    12) { IDX: 18_#12, IDY: 10_#14, iX: 12, iY: 14 }
    13) { IDX: 19_#13, IDY: 10_#15, iX: 13, iY: 15 }
 2) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: _#2, iX: 0, iY: 2 }
     1) { IDX: 1_#1, IDY: <null>, iX: 1, iY: <null> }
     2) { IDX: _#2, IDY: <null>, iX: 2, iY: <null> }
     3) { IDX: 4_#3, IDY: <null>, iX: 3, iY: <null> }
     4) { IDX: 6_#4, IDY: <null>, iX: 4, iY: <null> }
     5) { IDX: 7_#5, IDY: <null>, iX: 5, iY: <null> }
     6) { IDX: 9_#6, IDY: <null>, iX: 6, iY: <null> }
     7) { IDX: _#7, IDY: <null>, iX: 7, iY: <null> }
     8) { IDX: 12_#8, IDY: <null>, iX: 8, iY: <null> }
     9) { IDX: 13_#9, IDY: <null>, iX: 9, iY: <null> }
    10) { IDX: 15_#10, IDY: <null>, iX: 10, iY: <null> }
    11) { IDX: 16_#11, IDY: <null>, iX: 11, iY: <null> }
    12) { IDX: 18_#12, IDY: <null>, iX: 12, iY: <null> }
    13) { IDX: 19_#13, IDY: <null>, iX: 13, iY: <null> }
 3) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: 13_#2, iX: 0, iY: 2 }
     1) { IDX: 1_#1, IDY: <null>, iX: 1, iY: <null> }
     2) { IDX: _#2, IDY: <null>, iX: 2, iY: <null> }
     3) { IDX: 4_#3, IDY: <null>, iX: 3, iY: <null> }
     4) { IDX: 6_#4, IDY: <null>, iX: 4, iY: <null> }
     5) { IDX: 7_#5, IDY: <null>, iX: 5, iY: <null> }
     6) { IDX: 9_#6, IDY: <null>, iX: 6, iY: <null> }
     7) { IDX: _#7, IDY: <null>, iX: 7, iY: <null> }
     8) { IDX: 12_#8, IDY: <null>, iX: 8, iY: <null> }
     9) { IDX: 13_#9, IDY: <null>, iX: 9, iY: <null> }
    10) { IDX: 15_#10, IDY: <null>, iX: 10, iY: <null> }
    11) { IDX: 16_#11, IDY: <null>, iX: 11, iY: <null> }
    12) { IDX: 18_#12, IDY: <null>, iX: 12, iY: <null> }
    13) { IDX: 19_#13, IDY: <null>, iX: 13, iY: <null> }
 4) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: <null>, iX: 0, iY: <null> }
     1) { IDX: 1_#1, IDY: <null>, iX: 1, iY: <null> }
     2) { IDX: _#2, IDY: <null>, iX: 2, iY: <null> }
     3) { IDX: 4_#3, IDY: <null>, iX: 3, iY: <null> }
     4) { IDX: 6_#4, IDY: <null>, iX: 4, iY: <null> }
     5) { IDX: 7_#5, IDY: <null>, iX: 5, iY: <null> }
     6) { IDX: 9_#6, IDY: <null>, iX: 6, iY: <null> }
     7) { IDX: _#7, IDY: <null>, iX: 7, iY: <null> }
     8) { IDX: 12_#8, IDY: <null>, iX: 8, iY: <null> }
     9) { IDX: 13_#9, IDY: <null>, iX: 9, iY: <null> }
    10) { IDX: 15_#10, IDY: <null>, iX: 10, iY: <null> }
    11) { IDX: 16_#11, IDY: <null>, iX: 11, iY: <null> }
    12) { IDX: 18_#12, IDY: <null>, iX: 12, iY: <null> }
    13) { IDX: 19_#13, IDY: <null>, iX: 13, iY: <null> }
 5) <null>
 6) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: _#2, iX: 0, iY: 2 }
     1) { IDX: 0_#1, IDY: 4_#3, iX: 1, iY: 3 }
     2) { IDX: 2_#2, IDY: 6_#4, iX: 2, iY: 4 }
     3) { IDX: 2_#3, IDY: 7_#5, iX: 3, iY: 5 }
     4) { IDX: _#4, IDY: 9_#6, iX: 4, iY: 6 }
     5) { IDX: _#5, IDY: _#7, iX: 5, iY: 7 }
     6) { IDX: 4_#6, IDY: 12_#8, iX: 6, iY: 8 }
     7) { IDX: 4_#7, IDY: 13_#9, iX: 7, iY: 9 }
     8) { IDX: 6_#8, IDY: 15_#10, iX: 8, iY: 10 }
     9) { IDX: 6_#9, IDY: 16_#11, iX: 9, iY: 11 }
    10) { IDX: 7_#10, IDY: 18_#12, iX: 10, iY: 12 }
    11) { IDX: 7_#11, IDY: 19_#13, iX: 11, iY: 13 }
    12) { IDX: _#12, IDY: <null>, iX: 12, iY: <null> }
    13) { IDX: _#13, IDY: <null>, iX: 13, iY: <null> }
    14) { IDX: 10_#14, IDY: <null>, iX: 14, iY: <null> }
    15) { IDX: 10_#15, IDY: <null>, iX: 15, iY: <null> }
    16) { IDX: 11_#16, IDY: <null>, iX: 16, iY: <null> }
    17) { IDX: 11_#17, IDY: <null>, iX: 17, iY: <null> }
    18) { IDX: 12_#18, IDY: <null>, iX: 18, iY: <null> }
    19) { IDX: 12_#19, IDY: <null>, iX: 19, iY: <null> }
    20) { IDX: 14_#20, IDY: <null>, iX: 20, iY: <null> }
    21) { IDX: 14_#21, IDY: <null>, iX: 21, iY: <null> }
    22) { IDX: 15_#22, IDY: <null>, iX: 22, iY: <null> }
    23) { IDX: 15_#23, IDY: <null>, iX: 23, iY: <null> }
    24) { IDX: 16_#24, IDY: <null>, iX: 24, iY: <null> }
    25) { IDX: 16_#25, IDY: <null>, iX: 25, iY: <null> }
    26) { IDX: _#26, IDY: <null>, iX: 26, iY: <null> }
    27) { IDX: _#27, IDY: <null>, iX: 27, iY: <null> }
    28) { IDX: 19_#28, IDY: <null>, iX: 28, iY: <null> }
    29) { IDX: 19_#29, IDY: <null>, iX: 29, iY: <null> }
 7) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: 2_#2, iX: 0, iY: 2 }
     1) { IDX: 0_#1, IDY: 2_#3, iX: 1, iY: 3 }
     2) { IDX: 2_#2, IDY: _#4, iX: 2, iY: 4 }
     3) { IDX: 2_#3, IDY: _#5, iX: 3, iY: 5 }
     4) { IDX: _#4, IDY: 4_#6, iX: 4, iY: 6 }
     5) { IDX: _#5, IDY: 4_#7, iX: 5, iY: 7 }
     6) { IDX: 4_#6, IDY: 6_#8, iX: 6, iY: 8 }
     7) { IDX: 4_#7, IDY: 6_#9, iX: 7, iY: 9 }
     8) { IDX: 6_#8, IDY: 7_#10, iX: 8, iY: 10 }
     9) { IDX: 6_#9, IDY: 7_#11, iX: 9, iY: 11 }
    10) { IDX: 7_#10, IDY: _#12, iX: 10, iY: 12 }
    11) { IDX: 7_#11, IDY: _#13, iX: 11, iY: 13 }
    12) { IDX: _#12, IDY: 10_#14, iX: 12, iY: 14 }
    13) { IDX: _#13, IDY: 10_#15, iX: 13, iY: 15 }
    14) { IDX: 10_#14, IDY: 11_#16, iX: 14, iY: 16 }
    15) { IDX: 10_#15, IDY: 11_#17, iX: 15, iY: 17 }
    16) { IDX: 11_#16, IDY: 12_#18, iX: 16, iY: 18 }
    17) { IDX: 11_#17, IDY: 12_#19, iX: 17, iY: 19 }
    18) { IDX: 12_#18, IDY: 14_#20, iX: 18, iY: 20 }
    19) { IDX: 12_#19, IDY: 14_#21, iX: 19, iY: 21 }
    20) { IDX: 14_#20, IDY: 15_#22, iX: 20, iY: 22 }
    21) { IDX: 14_#21, IDY: 15_#23, iX: 21, iY: 23 }
    22) { IDX: 15_#22, IDY: 16_#24, iX: 22, iY: 24 }
    23) { IDX: 15_#23, IDY: 16_#25, iX: 23, iY: 25 }
    24) { IDX: 16_#24, IDY: _#26, iX: 24, iY: 26 }
    25) { IDX: 16_#25, IDY: _#27, iX: 25, iY: 27 }
    26) { IDX: _#26, IDY: 19_#28, iX: 26, iY: 28 }
    27) { IDX: _#27, IDY: 19_#29, iX: 27, iY: 29 }
    28) { IDX: 19_#28, IDY: <null>, iX: 28, iY: <null> }
    29) { IDX: 19_#29, IDY: <null>, iX: 29, iY: <null> }
 8) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: _#2, iX: 0, iY: 2 }
     1) { IDX: 0_#1, IDY: <null>, iX: 1, iY: <null> }
     2) { IDX: 2_#2, IDY: <null>, iX: 2, iY: <null> }
     3) { IDX: 2_#3, IDY: <null>, iX: 3, iY: <null> }
     4) { IDX: _#4, IDY: <null>, iX: 4, iY: <null> }
     5) { IDX: _#5, IDY: <null>, iX: 5, iY: <null> }
     6) { IDX: 4_#6, IDY: <null>, iX: 6, iY: <null> }
     7) { IDX: 4_#7, IDY: <null>, iX: 7, iY: <null> }
     8) { IDX: 6_#8, IDY: <null>, iX: 8, iY: <null> }
     9) { IDX: 6_#9, IDY: <null>, iX: 9, iY: <null> }
    10) { IDX: 7_#10, IDY: <null>, iX: 10, iY: <null> }
    11) { IDX: 7_#11, IDY: <null>, iX: 11, iY: <null> }
    12) { IDX: _#12, IDY: <null>, iX: 12, iY: <null> }
    13) { IDX: _#13, IDY: <null>, iX: 13, iY: <null> }
    14) { IDX: 10_#14, IDY: <null>, iX: 14, iY: <null> }
    15) { IDX: 10_#15, IDY: <null>, iX: 15, iY: <null> }
    16) { IDX: 11_#16, IDY: <null>, iX: 16, iY: <null> }
    17) { IDX: 11_#17, IDY: <null>, iX: 17, iY: <null> }
    18) { IDX: 12_#18, IDY: <null>, iX: 18, iY: <null> }
    19) { IDX: 12_#19, IDY: <null>, iX: 19, iY: <null> }
    20) { IDX: 14_#20, IDY: <null>, iX: 20, iY: <null> }
    21) { IDX: 14_#21, IDY: <null>, iX: 21, iY: <null> }
    22) { IDX: 15_#22, IDY: <null>, iX: 22, iY: <null> }
    23) { IDX: 15_#23, IDY: <null>, iX: 23, iY: <null> }
    24) { IDX: 16_#24, IDY: <null>, iX: 24, iY: <null> }
    25) { IDX: 16_#25, IDY: <null>, iX: 25, iY: <null> }
    26) { IDX: _#26, IDY: <null>, iX: 26, iY: <null> }
    27) { IDX: _#27, IDY: <null>, iX: 27, iY: <null> }
    28) { IDX: 19_#28, IDY: <null>, iX: 28, iY: <null> }
    29) { IDX: 19_#29, IDY: <null>, iX: 29, iY: <null> }
 9) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: 13_#2, iX: 0, iY: 2 }
     1) { IDX: 0_#1, IDY: <null>, iX: 1, iY: <null> }
     2) { IDX: 2_#2, IDY: <null>, iX: 2, iY: <null> }
     3) { IDX: 2_#3, IDY: <null>, iX: 3, iY: <null> }
     4) { IDX: _#4, IDY: <null>, iX: 4, iY: <null> }
     5) { IDX: _#5, IDY: <null>, iX: 5, iY: <null> }
     6) { IDX: 4_#6, IDY: <null>, iX: 6, iY: <null> }
     7) { IDX: 4_#7, IDY: <null>, iX: 7, iY: <null> }
     8) { IDX: 6_#8, IDY: <null>, iX: 8, iY: <null> }
     9) { IDX: 6_#9, IDY: <null>, iX: 9, iY: <null> }
    10) { IDX: 7_#10, IDY: <null>, iX: 10, iY: <null> }
    11) { IDX: 7_#11, IDY: <null>, iX: 11, iY: <null> }
    12) { IDX: _#12, IDY: <null>, iX: 12, iY: <null> }
    13) { IDX: _#13, IDY: <null>, iX: 13, iY: <null> }
    14) { IDX: 10_#14, IDY: <null>, iX: 14, iY: <null> }
    15) { IDX: 10_#15, IDY: <null>, iX: 15, iY: <null> }
    16) { IDX: 11_#16, IDY: <null>, iX: 16, iY: <null> }
    17) { IDX: 11_#17, IDY: <null>, iX: 17, iY: <null> }
    18) { IDX: 12_#18, IDY: <null>, iX: 18, iY: <null> }
    19) { IDX: 12_#19, IDY: <null>, iX: 19, iY: <null> }
    20) { IDX: 14_#20, IDY: <null>, iX: 20, iY: <null> }
    21) { IDX: 14_#21, IDY: <null>, iX: 21, iY: <null> }
    22) { IDX: 15_#22, IDY: <null>, iX: 22, iY: <null> }
    23) { IDX: 15_#23, IDY: <null>, iX: 23, iY: <null> }
    24) { IDX: 16_#24, IDY: <null>, iX: 24, iY: <null> }
    25) { IDX: 16_#25, IDY: <null>, iX: 25, iY: <null> }
    26) { IDX: _#26, IDY: <null>, iX: 26, iY: <null> }
    27) { IDX: _#27, IDY: <null>, iX: 27, iY: <null> }
    28) { IDX: 19_#28, IDY: <null>, iX: 28, iY: <null> }
    29) { IDX: 19_#29, IDY: <null>, iX: 29, iY: <null> }
10) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: <null>, iX: 0, iY: <null> }
     1) { IDX: 0_#1, IDY: <null>, iX: 1, iY: <null> }
     2) { IDX: 2_#2, IDY: <null>, iX: 2, iY: <null> }
     3) { IDX: 2_#3, IDY: <null>, iX: 3, iY: <null> }
     4) { IDX: _#4, IDY: <null>, iX: 4, iY: <null> }
     5) { IDX: _#5, IDY: <null>, iX: 5, iY: <null> }
     6) { IDX: 4_#6, IDY: <null>, iX: 6, iY: <null> }
     7) { IDX: 4_#7, IDY: <null>, iX: 7, iY: <null> }
     8) { IDX: 6_#8, IDY: <null>, iX: 8, iY: <null> }
     9) { IDX: 6_#9, IDY: <null>, iX: 9, iY: <null> }
    10) { IDX: 7_#10, IDY: <null>, iX: 10, iY: <null> }
    11) { IDX: 7_#11, IDY: <null>, iX: 11, iY: <null> }
    12) { IDX: _#12, IDY: <null>, iX: 12, iY: <null> }
    13) { IDX: _#13, IDY: <null>, iX: 13, iY: <null> }
    14) { IDX: 10_#14, IDY: <null>, iX: 14, iY: <null> }
    15) { IDX: 10_#15, IDY: <null>, iX: 15, iY: <null> }
    16) { IDX: 11_#16, IDY: <null>, iX: 16, iY: <null> }
    17) { IDX: 11_#17, IDY: <null>, iX: 17, iY: <null> }
    18) { IDX: 12_#18, IDY: <null>, iX: 18, iY: <null> }
    19) { IDX: 12_#19, IDY: <null>, iX: 19, iY: <null> }
    20) { IDX: 14_#20, IDY: <null>, iX: 20, iY: <null> }
    21) { IDX: 14_#21, IDY: <null>, iX: 21, iY: <null> }
    22) { IDX: 15_#22, IDY: <null>, iX: 22, iY: <null> }
    23) { IDX: 15_#23, IDY: <null>, iX: 23, iY: <null> }
    24) { IDX: 16_#24, IDY: <null>, iX: 24, iY: <null> }
    25) { IDX: 16_#25, IDY: <null>, iX: 25, iY: <null> }
    26) { IDX: _#26, IDY: <null>, iX: 26, iY: <null> }
    27) { IDX: _#27, IDY: <null>, iX: 27, iY: <null> }
    28) { IDX: 19_#28, IDY: <null>, iX: 28, iY: <null> }
    29) { IDX: 19_#29, IDY: <null>, iX: 29, iY: <null> }
11) <null>
12) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: _#0, IDY: _#2, iX: 0, iY: 2 }
     1) { IDX: _#1, IDY: 4_#3, iX: 1, iY: 3 }
     2) { IDX: _#2, IDY: 6_#4, iX: 2, iY: 4 }
13) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: _#0, IDY: 2_#2, iX: 0, iY: 2 }
     1) { IDX: _#1, IDY: 2_#3, iX: 1, iY: 3 }
     2) { IDX: _#2, IDY: _#4, iX: 2, iY: 4 }
14) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: _#0, IDY: _#2, iX: 0, iY: 2 }
     1) { IDX: _#1, IDY: <null>, iX: 1, iY: <null> }
     2) { IDX: _#2, IDY: <null>, iX: 2, iY: <null> }
15) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: _#0, IDY: 13_#2, iX: 0, iY: 2 }
     1) { IDX: _#1, IDY: <null>, iX: 1, iY: <null> }
     2) { IDX: _#2, IDY: <null>, iX: 2, iY: <null> }
16) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: _#0, IDY: <null>, iX: 0, iY: <null> }
     1) { IDX: _#1, IDY: <null>, iX: 1, iY: <null> }
     2) { IDX: _#2, IDY: <null>, iX: 2, iY: <null> }
17) <null>
18) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 11_#0, IDY: _#2, iX: 0, iY: 2 }
     1) { IDX: 12_#1, IDY: 4_#3, iX: 1, iY: 3 }
     2) { IDX: 13_#2, IDY: 6_#4, iX: 2, iY: 4 }
19) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 11_#0, IDY: 2_#2, iX: 0, iY: 2 }
     1) { IDX: 12_#1, IDY: 2_#3, iX: 1, iY: 3 }
     2) { IDX: 13_#2, IDY: _#4, iX: 2, iY: 4 }
20) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 11_#0, IDY: _#2, iX: 0, iY: 2 }
     1) { IDX: 12_#1, IDY: <null>, iX: 1, iY: <null> }
     2) { IDX: 13_#2, IDY: <null>, iX: 2, iY: <null> }
21) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 11_#0, IDY: 13_#2, iX: 0, iY: 2 }
     1) { IDX: 12_#1, IDY: <null>, iX: 1, iY: <null> }
     2) { IDX: 13_#2, IDY: <null>, iX: 2, iY: <null> }
22) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 11_#0, IDY: <null>, iX: 0, iY: <null> }
     1) { IDX: 12_#1, IDY: <null>, iX: 1, iY: <null> }
     2) { IDX: 13_#2, IDY: <null>, iX: 2, iY: <null> }
23) <null>
24) Sequence: Seq<{str,str,i8,i8}>
25) Sequence: Seq<{str,str,i8,i8}>
26) Sequence: Seq<{str,str,i8,i8}>
27) Sequence: Seq<{str,str,i8,i8}>
28) Sequence: Seq<{str,str,i8,i8}>
29) <null>
30) <null>
31) <null>
32) <null>
33) <null>
34) <null>
35) <null>
*** Ctx ping count: 233
    [0:3](184=0+0+184): KeyJoin(*4: *1x, *6: *2x, Add(#3, 2), #5, Ref<{IDX:s, IDY:s, iX:i8, iY:i8?}>({IDX:*4.ID, IDY:*6.ID, iX:#3, iY:#5}), {IDX:*4.ID, iX:#3[, IDY:str(<null>), iY:null:i8?]})
    [3:5](49=7+42): CrossJoin(*1: XSi, *2: YSi, true, KeyJoin(*4: *1, *6: *2, Add(#3, 2), #5, Ref<{IDX:s, IDY:s, iX:i8, iY:i8?}>({IDX:*4.ID, IDY:*6.ID, iX:#3, iY:#5}), {IDX:*4.ID, iX:#3[, IDY:str(<null>), iY:null:i8?]}))
###
> CrossJoin(X:XSi, Y:YSi, true,   KeyJoin(x:X, y:Y,           V,    V , { iX: #x, IDX:x.ID, iY: #y, IDY:y.ID }, { iX: #, IDX:ID }, { iY: #, IDY:ID }))
CrossJoin(X : XSi, Y : YSi, true, KeyJoin(x : X, y : Y, V, V, { iX : #x, IDX : x.ID, iY : #y, IDY : y.ID }, { iX : #, IDX : ID }, { iY : #, IDY : ID })) : {IDX:s, IDY:s, iX:i8?, iY:i8?}**
BndKind:Call, Type:{IDX:s, IDY:s, iX:i8?, iY:i8?}**, Bnd:(Call(∂.CrossJoin([map:1] Global(XSi), [map:2] Global(YSi), true:b, Call(∂.KeyJoin([map:4] Scope(1), [map:6] Scope(2), GetField(Scope(4), V), GetField(Scope(6), V), Ref<{IDX:s, IDY:s, iX:i8?, iY:i8?}>({IDX:GetField(Scope(4), ID), IDY:GetField(Scope(6), ID), iX:Scope(3), iY:Scope(5)}), {IDX:GetField(Scope(4), ID), iX:Opt<i8?>(Scope(3))[, IDY:str(<null>), iY:null:i8?]}, {IDY:GetField(Scope(6), ID), iY:Opt<i8?>(Scope(5))[, IDX:str(<null>), iX:null:i8?]})))))
// (<ctx>, ∂.XSi:{ID:s, V:i8?}**, ∂.YSi:{ID:s, V:i8?}**) : {IDX:s, IDY:s, iX:i8?, iY:i8?}**
CrossJoin_2(Arr<obj>, Seq<{str,i8}>, Seq<{str,i8}>):bool
      1) ldc.i4.1
      1) ret
  Total Size: 2

KeyJoin_2(Arr<obj>, i8, {str,i8}):Opt<i8>
      1) ldarg.2 [{str,i8}]
      1) dup
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      5) ldfld {str,i8}::_F1:i8
      5) newobj Opt<i8>(i8)
      5) br [1]
  Label [0]:
      1) pop
      5) call static CodeGenUtil::GetDefault():Opt<i8>
  Label [1]:
      1) ret
  Total Size: 36

KeyJoin_3(Arr<obj>, i8, {str,i8}):Opt<i8>
      1) ldarg.2 [{str,i8}]
      1) dup
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      5) ldfld {str,i8}::_F1:i8
      5) newobj Opt<i8>(i8)
      5) br [1]
  Label [0]:
      1) pop
      5) call static CodeGenUtil::GetDefault():Opt<i8>
  Label [1]:
      1) ret
  Total Size: 36

KeyJoin_4(Arr<obj>, i8, {str,i8}, i8, {str,i8}):{str,str,i8,i8}
      5) newobj {str,str,i8,i8}()
      1) dup
      2) ldc.i4.s [15]
      5) stfld {str,str,i8,i8}::_B0:u1
      1) stloc.0 [{str,str,i8,i8}]
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F0:str
      1) ldloc.0 [{str,str,i8,i8}]
      2) ldarg.s [{str,i8} (4)]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F1:str
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.1 [i8]
      5) stfld {str,str,i8,i8}::_F2:i8
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.3 [i8]
      5) stfld {str,str,i8,i8}::_F3:i8
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 68

KeyJoin_5(Arr<obj>, i8, {str,i8}):{str,str,i8,i8}
      5) newobj {str,str,i8,i8}()
      1) dup
      1) ldc.i4.3
      5) stfld {str,str,i8,i8}::_B0:u1
      1) stloc.0 [{str,str,i8,i8}]
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F0:str
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.1 [i8]
      5) stfld {str,str,i8,i8}::_F2:i8
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.4
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 61

KeyJoin_6(Arr<obj>, i8, {str,i8}):{str,str,i8,i8}
      5) newobj {str,str,i8,i8}()
      1) dup
      1) ldc.i4.3
      5) stfld {str,str,i8,i8}::_B0:u1
      1) stloc.0 [{str,str,i8,i8}]
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8,i8}::_F1:str
      1) ldloc.0 [{str,str,i8,i8}]
      1) ldarg.1 [i8]
      5) stfld {str,str,i8,i8}::_F3:i8
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      5) ldfld {str,str,i8,i8}::_B0:u1
      1) ldc.i4.8
      1) or
      5) stfld {str,str,i8,i8}::_B0:u1
      1) ldloc.0 [{str,str,i8,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 61

CrossJoin_3(Arr<obj>, Seq<{str,i8}>, Seq<{str,i8}>):Seq<{str,str,i8,i8}>
      1) ldarg.1 [Seq<{str,i8}>]
      1) ldarg.2 [Seq<{str,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<i8,{str,i8},Opt<i8>>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [Func<i8,{str,i8},Opt<i8>>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Func<i8,{str,i8},i8,{str,i8},{str,str,i8,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.3
      5) ldelem [Func<i8,{str,i8},{str,str,i8,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.4
      5) ldelem [Func<i8,{str,i8},{str,str,i8,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.5
      5) ldelem [EqualityComparer<Opt<i8>>]
      1) ldc.i4.1
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [ExecCtx]
      1) ldc.i4.0
      5) call static KeyJoinGen::ExecInd(Seq<{str,i8}>, Seq<{str,i8}>, Func<i8,{str,i8},Opt<i8>>, Func<i8,{str,i8},Opt<i8>>, Func<i8,{str,i8},i8,{str,i8},{str,str,i8,i8}>, Func<i8,{str,i8},{str,str,i8,i8}>, Func<i8,{str,i8},{str,str,i8,i8}>, EqualityComparer<Opt<i8>>, bool, ExecCtx, i4):Seq<{str,str,i8,i8}>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<{str,str,i8,i8}>):Seq<{str,str,i8,i8}>
      1) ret
  Total Size: 100

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):ExecCtx
      1) stloc.0 [ExecCtx]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<Seq<{str,i8}>>
      1) stloc.1 [Seq<Seq<{str,i8}>>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.2
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<Seq<{str,i8}>>
      1) stloc.2 [Seq<Seq<{str,i8}>>]
      1) ldloc.1 [Seq<Seq<{str,i8}>>]
      1) ldloc.2 [Seq<Seq<{str,i8}>>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<Seq<{str,i8}>,Seq<{str,i8}>,bool>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [MethodInfo]
      5) ldtoken [Func<Seq<{str,i8}>,Seq<{str,i8}>,Seq<{str,str,i8,i8}>>]
      5) call static Type::GetTypeFromHandle(RuntimeTypeHandle):Type
      1) ldc.i4.2
      5) newarr [obj]
      1) dup
      1) ldc.i4.0
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Arr<obj>]
      5) stelem [Arr<obj>]
      1) dup
      1) ldc.i4.1
      1) ldloc.0 [ExecCtx]
      5) stelem [ExecCtx]
      5) callvirt DynamicMethod::CreateDelegate(Type, obj):Delegate
      1) ldloc.0 [ExecCtx]
      1) ldc.i4.3
      5) call static CrossJoinGen::Exec(Seq<Seq<{str,i8}>>, Seq<Seq<{str,i8}>>, Func<Seq<{str,i8}>,Seq<{str,i8}>,bool>, Func<Seq<{str,i8}>,Seq<{str,i8}>,Seq<{str,str,i8,i8}>>, ExecCtx, i4):Seq<Seq<{str,str,i8,i8}>>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<Seq<{str,str,i8,i8}>>):Seq<Seq<{str,str,i8,i8}>>
      1) ret
  Total Size: 99

Func sig: (<ctx>:x, XSi:{ID:s, V:i8?}**, YSi:{ID:s, V:i8?}**) to {IDX:s, IDY:s, iX:i8?, iY:i8?}**
Sequence: Seq<Seq<{str,str,i8,i8}>>
 0) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: 0_#0, iX: 0, iY: 0 }
     1) { IDX: <null>, IDY: _#2, iX: <null>, iY: 2 }
     2) { IDX: <null>, IDY: _#7, iX: <null>, iY: 7 }
     3) { IDX: 1_#1, IDY: 1_#1, iX: 1, iY: 1 }
     4) { IDX: _#2, IDY: <null>, iX: 2, iY: <null> }
     5) { IDX: 4_#3, IDY: 4_#3, iX: 3, iY: 3 }
     6) { IDX: 6_#4, IDY: 6_#4, iX: 4, iY: 4 }
     7) { IDX: 7_#5, IDY: 7_#5, iX: 5, iY: 5 }
     8) { IDX: 9_#6, IDY: 9_#6, iX: 6, iY: 6 }
     9) { IDX: _#7, IDY: <null>, iX: 7, iY: <null> }
    10) { IDX: 12_#8, IDY: 12_#8, iX: 8, iY: 8 }
    11) { IDX: 13_#9, IDY: 13_#9, iX: 9, iY: 9 }
    12) { IDX: 15_#10, IDY: 15_#10, iX: 10, iY: 10 }
    13) { IDX: 16_#11, IDY: 16_#11, iX: 11, iY: 11 }
    14) { IDX: 18_#12, IDY: 18_#12, iX: 12, iY: 12 }
    15) { IDX: 19_#13, IDY: 19_#13, iX: 13, iY: 13 }
 1) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: 0_#0, iX: 0, iY: 0 }
     1) { IDX: 0_#0, IDY: 0_#1, iX: 0, iY: 1 }
     2) { IDX: <null>, IDY: _#4, iX: <null>, iY: 4 }
     3) { IDX: <null>, IDY: _#5, iX: <null>, iY: 5 }
     4) { IDX: <null>, IDY: _#12, iX: <null>, iY: 12 }
     5) { IDX: <null>, IDY: _#13, iX: <null>, iY: 13 }
     6) { IDX: <null>, IDY: _#26, iX: <null>, iY: 26 }
     7) { IDX: <null>, IDY: _#27, iX: <null>, iY: 27 }
     8) { IDX: 1_#1, IDY: <null>, iX: 1, iY: <null> }
     9) { IDX: _#2, IDY: <null>, iX: 2, iY: <null> }
    10) { IDX: 4_#3, IDY: 4_#6, iX: 3, iY: 6 }
    11) { IDX: 4_#3, IDY: 4_#7, iX: 3, iY: 7 }
    12) { IDX: 6_#4, IDY: 6_#8, iX: 4, iY: 8 }
    13) { IDX: 6_#4, IDY: 6_#9, iX: 4, iY: 9 }
    14) { IDX: 7_#5, IDY: 7_#10, iX: 5, iY: 10 }
    15) { IDX: 7_#5, IDY: 7_#11, iX: 5, iY: 11 }
    16) { IDX: 9_#6, IDY: <null>, iX: 6, iY: <null> }
    17) { IDX: _#7, IDY: <null>, iX: 7, iY: <null> }
    18) { IDX: 12_#8, IDY: 12_#18, iX: 8, iY: 18 }
    19) { IDX: 12_#8, IDY: 12_#19, iX: 8, iY: 19 }
    20) { IDX: 13_#9, IDY: <null>, iX: 9, iY: <null> }
    21) { IDX: 15_#10, IDY: 15_#22, iX: 10, iY: 22 }
    22) { IDX: 15_#10, IDY: 15_#23, iX: 10, iY: 23 }
    23) { IDX: 16_#11, IDY: 16_#24, iX: 11, iY: 24 }
    24) { IDX: 16_#11, IDY: 16_#25, iX: 11, iY: 25 }
    25) { IDX: 18_#12, IDY: <null>, iX: 12, iY: <null> }
    26) { IDX: 19_#13, IDY: 19_#28, iX: 13, iY: 28 }
    27) { IDX: 19_#13, IDY: 19_#29, iX: 13, iY: 29 }
    28) { IDX: <null>, IDY: 2_#2, iX: <null>, iY: 2 }
    29) { IDX: <null>, IDY: 2_#3, iX: <null>, iY: 3 }
    30) { IDX: <null>, IDY: 10_#14, iX: <null>, iY: 14 }
    31) { IDX: <null>, IDY: 10_#15, iX: <null>, iY: 15 }
    32) { IDX: <null>, IDY: 11_#16, iX: <null>, iY: 16 }
    33) { IDX: <null>, IDY: 11_#17, iX: <null>, iY: 17 }
    34) { IDX: <null>, IDY: 14_#20, iX: <null>, iY: 20 }
    35) { IDX: <null>, IDY: 14_#21, iX: <null>, iY: 21 }
 2) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: <null>, IDY: _#0, iX: <null>, iY: 0 }
     1) { IDX: <null>, IDY: _#1, iX: <null>, iY: 1 }
     2) { IDX: <null>, IDY: _#2, iX: <null>, iY: 2 }
     3) { IDX: 0_#0, IDY: <null>, iX: 0, iY: <null> }
     4) { IDX: 1_#1, IDY: <null>, iX: 1, iY: <null> }
     5) { IDX: _#2, IDY: <null>, iX: 2, iY: <null> }
     6) { IDX: 4_#3, IDY: <null>, iX: 3, iY: <null> }
     7) { IDX: 6_#4, IDY: <null>, iX: 4, iY: <null> }
     8) { IDX: 7_#5, IDY: <null>, iX: 5, iY: <null> }
     9) { IDX: 9_#6, IDY: <null>, iX: 6, iY: <null> }
    10) { IDX: _#7, IDY: <null>, iX: 7, iY: <null> }
    11) { IDX: 12_#8, IDY: <null>, iX: 8, iY: <null> }
    12) { IDX: 13_#9, IDY: <null>, iX: 9, iY: <null> }
    13) { IDX: 15_#10, IDY: <null>, iX: 10, iY: <null> }
    14) { IDX: 16_#11, IDY: <null>, iX: 11, iY: <null> }
    15) { IDX: 18_#12, IDY: <null>, iX: 12, iY: <null> }
    16) { IDX: 19_#13, IDY: <null>, iX: 13, iY: <null> }
 3) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: <null>, iX: 0, iY: <null> }
     1) { IDX: 1_#1, IDY: <null>, iX: 1, iY: <null> }
     2) { IDX: _#2, IDY: <null>, iX: 2, iY: <null> }
     3) { IDX: 4_#3, IDY: <null>, iX: 3, iY: <null> }
     4) { IDX: 6_#4, IDY: <null>, iX: 4, iY: <null> }
     5) { IDX: 7_#5, IDY: <null>, iX: 5, iY: <null> }
     6) { IDX: 9_#6, IDY: <null>, iX: 6, iY: <null> }
     7) { IDX: _#7, IDY: <null>, iX: 7, iY: <null> }
     8) { IDX: 12_#8, IDY: 12_#1, iX: 8, iY: 1 }
     9) { IDX: 13_#9, IDY: 13_#2, iX: 9, iY: 2 }
    10) { IDX: 15_#10, IDY: <null>, iX: 10, iY: <null> }
    11) { IDX: 16_#11, IDY: <null>, iX: 11, iY: <null> }
    12) { IDX: 18_#12, IDY: <null>, iX: 12, iY: <null> }
    13) { IDX: 19_#13, IDY: <null>, iX: 13, iY: <null> }
    14) { IDX: <null>, IDY: 11_#0, iX: <null>, iY: 0 }
 4) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: <null>, iX: 0, iY: <null> }
     1) { IDX: 1_#1, IDY: <null>, iX: 1, iY: <null> }
     2) { IDX: _#2, IDY: <null>, iX: 2, iY: <null> }
     3) { IDX: 4_#3, IDY: <null>, iX: 3, iY: <null> }
     4) { IDX: 6_#4, IDY: <null>, iX: 4, iY: <null> }
     5) { IDX: 7_#5, IDY: <null>, iX: 5, iY: <null> }
     6) { IDX: 9_#6, IDY: <null>, iX: 6, iY: <null> }
     7) { IDX: _#7, IDY: <null>, iX: 7, iY: <null> }
     8) { IDX: 12_#8, IDY: <null>, iX: 8, iY: <null> }
     9) { IDX: 13_#9, IDY: <null>, iX: 9, iY: <null> }
    10) { IDX: 15_#10, IDY: <null>, iX: 10, iY: <null> }
    11) { IDX: 16_#11, IDY: <null>, iX: 11, iY: <null> }
    12) { IDX: 18_#12, IDY: <null>, iX: 12, iY: <null> }
    13) { IDX: 19_#13, IDY: <null>, iX: 13, iY: <null> }
 5) <null>
 6) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: 0_#0, iX: 0, iY: 0 }
     1) { IDX: <null>, IDY: _#2, iX: <null>, iY: 2 }
     2) { IDX: <null>, IDY: _#7, iX: <null>, iY: 7 }
     3) { IDX: 0_#1, IDY: 0_#0, iX: 1, iY: 0 }
     4) { IDX: 2_#2, IDY: <null>, iX: 2, iY: <null> }
     5) { IDX: 2_#3, IDY: <null>, iX: 3, iY: <null> }
     6) { IDX: _#4, IDY: <null>, iX: 4, iY: <null> }
     7) { IDX: _#5, IDY: <null>, iX: 5, iY: <null> }
     8) { IDX: 4_#6, IDY: 4_#3, iX: 6, iY: 3 }
     9) { IDX: 4_#7, IDY: 4_#3, iX: 7, iY: 3 }
    10) { IDX: 6_#8, IDY: 6_#4, iX: 8, iY: 4 }
    11) { IDX: 6_#9, IDY: 6_#4, iX: 9, iY: 4 }
    12) { IDX: 7_#10, IDY: 7_#5, iX: 10, iY: 5 }
    13) { IDX: 7_#11, IDY: 7_#5, iX: 11, iY: 5 }
    14) { IDX: _#12, IDY: <null>, iX: 12, iY: <null> }
    15) { IDX: _#13, IDY: <null>, iX: 13, iY: <null> }
    16) { IDX: 10_#14, IDY: <null>, iX: 14, iY: <null> }
    17) { IDX: 10_#15, IDY: <null>, iX: 15, iY: <null> }
    18) { IDX: 11_#16, IDY: <null>, iX: 16, iY: <null> }
    19) { IDX: 11_#17, IDY: <null>, iX: 17, iY: <null> }
    20) { IDX: 12_#18, IDY: 12_#8, iX: 18, iY: 8 }
    21) { IDX: 12_#19, IDY: 12_#8, iX: 19, iY: 8 }
    22) { IDX: 14_#20, IDY: <null>, iX: 20, iY: <null> }
    23) { IDX: 14_#21, IDY: <null>, iX: 21, iY: <null> }
    24) { IDX: 15_#22, IDY: 15_#10, iX: 22, iY: 10 }
    25) { IDX: 15_#23, IDY: 15_#10, iX: 23, iY: 10 }
    26) { IDX: 16_#24, IDY: 16_#11, iX: 24, iY: 11 }
    27) { IDX: 16_#25, IDY: 16_#11, iX: 25, iY: 11 }
    28) { IDX: _#26, IDY: <null>, iX: 26, iY: <null> }
    29) { IDX: _#27, IDY: <null>, iX: 27, iY: <null> }
    30) { IDX: 19_#28, IDY: 19_#13, iX: 28, iY: 13 }
    31) { IDX: 19_#29, IDY: 19_#13, iX: 29, iY: 13 }
    32) { IDX: <null>, IDY: 1_#1, iX: <null>, iY: 1 }
    33) { IDX: <null>, IDY: 9_#6, iX: <null>, iY: 6 }
    34) { IDX: <null>, IDY: 13_#9, iX: <null>, iY: 9 }
    35) { IDX: <null>, IDY: 18_#12, iX: <null>, iY: 12 }
 7) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: 0_#0, iX: 0, iY: 0 }
     1) { IDX: 0_#0, IDY: 0_#1, iX: 0, iY: 1 }
     2) { IDX: <null>, IDY: _#4, iX: <null>, iY: 4 }
     3) { IDX: <null>, IDY: _#5, iX: <null>, iY: 5 }
     4) { IDX: <null>, IDY: _#12, iX: <null>, iY: 12 }
     5) { IDX: <null>, IDY: _#13, iX: <null>, iY: 13 }
     6) { IDX: <null>, IDY: _#26, iX: <null>, iY: 26 }
     7) { IDX: <null>, IDY: _#27, iX: <null>, iY: 27 }
     8) { IDX: 0_#1, IDY: 0_#0, iX: 1, iY: 0 }
     9) { IDX: 0_#1, IDY: 0_#1, iX: 1, iY: 1 }
    10) { IDX: 2_#2, IDY: 2_#2, iX: 2, iY: 2 }
    11) { IDX: 2_#2, IDY: 2_#3, iX: 2, iY: 3 }
    12) { IDX: 2_#3, IDY: 2_#2, iX: 3, iY: 2 }
    13) { IDX: 2_#3, IDY: 2_#3, iX: 3, iY: 3 }
    14) { IDX: _#4, IDY: <null>, iX: 4, iY: <null> }
    15) { IDX: _#5, IDY: <null>, iX: 5, iY: <null> }
    16) { IDX: 4_#6, IDY: 4_#6, iX: 6, iY: 6 }
    17) { IDX: 4_#6, IDY: 4_#7, iX: 6, iY: 7 }
    18) { IDX: 4_#7, IDY: 4_#6, iX: 7, iY: 6 }
    19) { IDX: 4_#7, IDY: 4_#7, iX: 7, iY: 7 }
    20) { IDX: 6_#8, IDY: 6_#8, iX: 8, iY: 8 }
    21) { IDX: 6_#8, IDY: 6_#9, iX: 8, iY: 9 }
    22) { IDX: 6_#9, IDY: 6_#8, iX: 9, iY: 8 }
    23) { IDX: 6_#9, IDY: 6_#9, iX: 9, iY: 9 }
    24) { IDX: 7_#10, IDY: 7_#10, iX: 10, iY: 10 }
    25) { IDX: 7_#10, IDY: 7_#11, iX: 10, iY: 11 }
    26) { IDX: 7_#11, IDY: 7_#10, iX: 11, iY: 10 }
    27) { IDX: 7_#11, IDY: 7_#11, iX: 11, iY: 11 }
    28) { IDX: _#12, IDY: <null>, iX: 12, iY: <null> }
    29) { IDX: _#13, IDY: <null>, iX: 13, iY: <null> }
    30) { IDX: 10_#14, IDY: 10_#14, iX: 14, iY: 14 }
    31) { IDX: 10_#14, IDY: 10_#15, iX: 14, iY: 15 }
    32) { IDX: 10_#15, IDY: 10_#14, iX: 15, iY: 14 }
    33) { IDX: 10_#15, IDY: 10_#15, iX: 15, iY: 15 }
    34) { IDX: 11_#16, IDY: 11_#16, iX: 16, iY: 16 }
    35) { IDX: 11_#16, IDY: 11_#17, iX: 16, iY: 17 }
    36) { IDX: 11_#17, IDY: 11_#16, iX: 17, iY: 16 }
    37) { IDX: 11_#17, IDY: 11_#17, iX: 17, iY: 17 }
    38) { IDX: 12_#18, IDY: 12_#18, iX: 18, iY: 18 }
    39) { IDX: 12_#18, IDY: 12_#19, iX: 18, iY: 19 }
    40) { IDX: 12_#19, IDY: 12_#18, iX: 19, iY: 18 }
    41) { IDX: 12_#19, IDY: 12_#19, iX: 19, iY: 19 }
    42) { IDX: 14_#20, IDY: 14_#20, iX: 20, iY: 20 }
    43) { IDX: 14_#20, IDY: 14_#21, iX: 20, iY: 21 }
    44) { IDX: 14_#21, IDY: 14_#20, iX: 21, iY: 20 }
    45) { IDX: 14_#21, IDY: 14_#21, iX: 21, iY: 21 }
    46) { IDX: 15_#22, IDY: 15_#22, iX: 22, iY: 22 }
    47) { IDX: 15_#22, IDY: 15_#23, iX: 22, iY: 23 }
    48) { IDX: 15_#23, IDY: 15_#22, iX: 23, iY: 22 }
    49) { IDX: 15_#23, IDY: 15_#23, iX: 23, iY: 23 }
    50) { IDX: 16_#24, IDY: 16_#24, iX: 24, iY: 24 }
    51) { IDX: 16_#24, IDY: 16_#25, iX: 24, iY: 25 }
    52) { IDX: 16_#25, IDY: 16_#24, iX: 25, iY: 24 }
    53) { IDX: 16_#25, IDY: 16_#25, iX: 25, iY: 25 }
    54) { IDX: _#26, IDY: <null>, iX: 26, iY: <null> }
    55) { IDX: _#27, IDY: <null>, iX: 27, iY: <null> }
    56) { IDX: 19_#28, IDY: 19_#28, iX: 28, iY: 28 }
    57) { IDX: 19_#28, IDY: 19_#29, iX: 28, iY: 29 }
    58) { IDX: 19_#29, IDY: 19_#28, iX: 29, iY: 28 }
    59) { IDX: 19_#29, IDY: 19_#29, iX: 29, iY: 29 }
 8) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: <null>, IDY: _#0, iX: <null>, iY: 0 }
     1) { IDX: <null>, IDY: _#1, iX: <null>, iY: 1 }
     2) { IDX: <null>, IDY: _#2, iX: <null>, iY: 2 }
     3) { IDX: 0_#0, IDY: <null>, iX: 0, iY: <null> }
     4) { IDX: 0_#1, IDY: <null>, iX: 1, iY: <null> }
     5) { IDX: 2_#2, IDY: <null>, iX: 2, iY: <null> }
     6) { IDX: 2_#3, IDY: <null>, iX: 3, iY: <null> }
     7) { IDX: _#4, IDY: <null>, iX: 4, iY: <null> }
     8) { IDX: _#5, IDY: <null>, iX: 5, iY: <null> }
     9) { IDX: 4_#6, IDY: <null>, iX: 6, iY: <null> }
    10) { IDX: 4_#7, IDY: <null>, iX: 7, iY: <null> }
    11) { IDX: 6_#8, IDY: <null>, iX: 8, iY: <null> }
    12) { IDX: 6_#9, IDY: <null>, iX: 9, iY: <null> }
    13) { IDX: 7_#10, IDY: <null>, iX: 10, iY: <null> }
    14) { IDX: 7_#11, IDY: <null>, iX: 11, iY: <null> }
    15) { IDX: _#12, IDY: <null>, iX: 12, iY: <null> }
    16) { IDX: _#13, IDY: <null>, iX: 13, iY: <null> }
    17) { IDX: 10_#14, IDY: <null>, iX: 14, iY: <null> }
    18) { IDX: 10_#15, IDY: <null>, iX: 15, iY: <null> }
    19) { IDX: 11_#16, IDY: <null>, iX: 16, iY: <null> }
    20) { IDX: 11_#17, IDY: <null>, iX: 17, iY: <null> }
    21) { IDX: 12_#18, IDY: <null>, iX: 18, iY: <null> }
    22) { IDX: 12_#19, IDY: <null>, iX: 19, iY: <null> }
    23) { IDX: 14_#20, IDY: <null>, iX: 20, iY: <null> }
    24) { IDX: 14_#21, IDY: <null>, iX: 21, iY: <null> }
    25) { IDX: 15_#22, IDY: <null>, iX: 22, iY: <null> }
    26) { IDX: 15_#23, IDY: <null>, iX: 23, iY: <null> }
    27) { IDX: 16_#24, IDY: <null>, iX: 24, iY: <null> }
    28) { IDX: 16_#25, IDY: <null>, iX: 25, iY: <null> }
    29) { IDX: _#26, IDY: <null>, iX: 26, iY: <null> }
    30) { IDX: _#27, IDY: <null>, iX: 27, iY: <null> }
    31) { IDX: 19_#28, IDY: <null>, iX: 28, iY: <null> }
    32) { IDX: 19_#29, IDY: <null>, iX: 29, iY: <null> }
 9) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: <null>, iX: 0, iY: <null> }
     1) { IDX: 0_#1, IDY: <null>, iX: 1, iY: <null> }
     2) { IDX: 2_#2, IDY: <null>, iX: 2, iY: <null> }
     3) { IDX: 2_#3, IDY: <null>, iX: 3, iY: <null> }
     4) { IDX: _#4, IDY: <null>, iX: 4, iY: <null> }
     5) { IDX: _#5, IDY: <null>, iX: 5, iY: <null> }
     6) { IDX: 4_#6, IDY: <null>, iX: 6, iY: <null> }
     7) { IDX: 4_#7, IDY: <null>, iX: 7, iY: <null> }
     8) { IDX: 6_#8, IDY: <null>, iX: 8, iY: <null> }
     9) { IDX: 6_#9, IDY: <null>, iX: 9, iY: <null> }
    10) { IDX: 7_#10, IDY: <null>, iX: 10, iY: <null> }
    11) { IDX: 7_#11, IDY: <null>, iX: 11, iY: <null> }
    12) { IDX: _#12, IDY: <null>, iX: 12, iY: <null> }
    13) { IDX: _#13, IDY: <null>, iX: 13, iY: <null> }
    14) { IDX: 10_#14, IDY: <null>, iX: 14, iY: <null> }
    15) { IDX: 10_#15, IDY: <null>, iX: 15, iY: <null> }
    16) { IDX: 11_#16, IDY: 11_#0, iX: 16, iY: 0 }
    17) { IDX: 11_#17, IDY: 11_#0, iX: 17, iY: 0 }
    18) { IDX: 12_#18, IDY: 12_#1, iX: 18, iY: 1 }
    19) { IDX: 12_#19, IDY: 12_#1, iX: 19, iY: 1 }
    20) { IDX: 14_#20, IDY: <null>, iX: 20, iY: <null> }
    21) { IDX: 14_#21, IDY: <null>, iX: 21, iY: <null> }
    22) { IDX: 15_#22, IDY: <null>, iX: 22, iY: <null> }
    23) { IDX: 15_#23, IDY: <null>, iX: 23, iY: <null> }
    24) { IDX: 16_#24, IDY: <null>, iX: 24, iY: <null> }
    25) { IDX: 16_#25, IDY: <null>, iX: 25, iY: <null> }
    26) { IDX: _#26, IDY: <null>, iX: 26, iY: <null> }
    27) { IDX: _#27, IDY: <null>, iX: 27, iY: <null> }
    28) { IDX: 19_#28, IDY: <null>, iX: 28, iY: <null> }
    29) { IDX: 19_#29, IDY: <null>, iX: 29, iY: <null> }
    30) { IDX: <null>, IDY: 13_#2, iX: <null>, iY: 2 }
10) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 0_#0, IDY: <null>, iX: 0, iY: <null> }
     1) { IDX: 0_#1, IDY: <null>, iX: 1, iY: <null> }
     2) { IDX: 2_#2, IDY: <null>, iX: 2, iY: <null> }
     3) { IDX: 2_#3, IDY: <null>, iX: 3, iY: <null> }
     4) { IDX: _#4, IDY: <null>, iX: 4, iY: <null> }
     5) { IDX: _#5, IDY: <null>, iX: 5, iY: <null> }
     6) { IDX: 4_#6, IDY: <null>, iX: 6, iY: <null> }
     7) { IDX: 4_#7, IDY: <null>, iX: 7, iY: <null> }
     8) { IDX: 6_#8, IDY: <null>, iX: 8, iY: <null> }
     9) { IDX: 6_#9, IDY: <null>, iX: 9, iY: <null> }
    10) { IDX: 7_#10, IDY: <null>, iX: 10, iY: <null> }
    11) { IDX: 7_#11, IDY: <null>, iX: 11, iY: <null> }
    12) { IDX: _#12, IDY: <null>, iX: 12, iY: <null> }
    13) { IDX: _#13, IDY: <null>, iX: 13, iY: <null> }
    14) { IDX: 10_#14, IDY: <null>, iX: 14, iY: <null> }
    15) { IDX: 10_#15, IDY: <null>, iX: 15, iY: <null> }
    16) { IDX: 11_#16, IDY: <null>, iX: 16, iY: <null> }
    17) { IDX: 11_#17, IDY: <null>, iX: 17, iY: <null> }
    18) { IDX: 12_#18, IDY: <null>, iX: 18, iY: <null> }
    19) { IDX: 12_#19, IDY: <null>, iX: 19, iY: <null> }
    20) { IDX: 14_#20, IDY: <null>, iX: 20, iY: <null> }
    21) { IDX: 14_#21, IDY: <null>, iX: 21, iY: <null> }
    22) { IDX: 15_#22, IDY: <null>, iX: 22, iY: <null> }
    23) { IDX: 15_#23, IDY: <null>, iX: 23, iY: <null> }
    24) { IDX: 16_#24, IDY: <null>, iX: 24, iY: <null> }
    25) { IDX: 16_#25, IDY: <null>, iX: 25, iY: <null> }
    26) { IDX: _#26, IDY: <null>, iX: 26, iY: <null> }
    27) { IDX: _#27, IDY: <null>, iX: 27, iY: <null> }
    28) { IDX: 19_#28, IDY: <null>, iX: 28, iY: <null> }
    29) { IDX: 19_#29, IDY: <null>, iX: 29, iY: <null> }
11) <null>
12) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: _#0, IDY: <null>, iX: 0, iY: <null> }
     1) { IDX: _#1, IDY: <null>, iX: 1, iY: <null> }
     2) { IDX: _#2, IDY: <null>, iX: 2, iY: <null> }
     3) { IDX: <null>, IDY: 0_#0, iX: <null>, iY: 0 }
     4) { IDX: <null>, IDY: 1_#1, iX: <null>, iY: 1 }
     5) { IDX: <null>, IDY: _#2, iX: <null>, iY: 2 }
     6) { IDX: <null>, IDY: 4_#3, iX: <null>, iY: 3 }
     7) { IDX: <null>, IDY: 6_#4, iX: <null>, iY: 4 }
     8) { IDX: <null>, IDY: 7_#5, iX: <null>, iY: 5 }
     9) { IDX: <null>, IDY: 9_#6, iX: <null>, iY: 6 }
    10) { IDX: <null>, IDY: _#7, iX: <null>, iY: 7 }
    11) { IDX: <null>, IDY: 12_#8, iX: <null>, iY: 8 }
    12) { IDX: <null>, IDY: 13_#9, iX: <null>, iY: 9 }
    13) { IDX: <null>, IDY: 15_#10, iX: <null>, iY: 10 }
    14) { IDX: <null>, IDY: 16_#11, iX: <null>, iY: 11 }
    15) { IDX: <null>, IDY: 18_#12, iX: <null>, iY: 12 }
    16) { IDX: <null>, IDY: 19_#13, iX: <null>, iY: 13 }
13) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: _#0, IDY: <null>, iX: 0, iY: <null> }
     1) { IDX: _#1, IDY: <null>, iX: 1, iY: <null> }
     2) { IDX: _#2, IDY: <null>, iX: 2, iY: <null> }
     3) { IDX: <null>, IDY: 0_#0, iX: <null>, iY: 0 }
     4) { IDX: <null>, IDY: 0_#1, iX: <null>, iY: 1 }
     5) { IDX: <null>, IDY: 2_#2, iX: <null>, iY: 2 }
     6) { IDX: <null>, IDY: 2_#3, iX: <null>, iY: 3 }
     7) { IDX: <null>, IDY: _#4, iX: <null>, iY: 4 }
     8) { IDX: <null>, IDY: _#5, iX: <null>, iY: 5 }
     9) { IDX: <null>, IDY: 4_#6, iX: <null>, iY: 6 }
    10) { IDX: <null>, IDY: 4_#7, iX: <null>, iY: 7 }
    11) { IDX: <null>, IDY: 6_#8, iX: <null>, iY: 8 }
    12) { IDX: <null>, IDY: 6_#9, iX: <null>, iY: 9 }
    13) { IDX: <null>, IDY: 7_#10, iX: <null>, iY: 10 }
    14) { IDX: <null>, IDY: 7_#11, iX: <null>, iY: 11 }
    15) { IDX: <null>, IDY: _#12, iX: <null>, iY: 12 }
    16) { IDX: <null>, IDY: _#13, iX: <null>, iY: 13 }
    17) { IDX: <null>, IDY: 10_#14, iX: <null>, iY: 14 }
    18) { IDX: <null>, IDY: 10_#15, iX: <null>, iY: 15 }
    19) { IDX: <null>, IDY: 11_#16, iX: <null>, iY: 16 }
    20) { IDX: <null>, IDY: 11_#17, iX: <null>, iY: 17 }
    21) { IDX: <null>, IDY: 12_#18, iX: <null>, iY: 18 }
    22) { IDX: <null>, IDY: 12_#19, iX: <null>, iY: 19 }
    23) { IDX: <null>, IDY: 14_#20, iX: <null>, iY: 20 }
    24) { IDX: <null>, IDY: 14_#21, iX: <null>, iY: 21 }
    25) { IDX: <null>, IDY: 15_#22, iX: <null>, iY: 22 }
    26) { IDX: <null>, IDY: 15_#23, iX: <null>, iY: 23 }
    27) { IDX: <null>, IDY: 16_#24, iX: <null>, iY: 24 }
    28) { IDX: <null>, IDY: 16_#25, iX: <null>, iY: 25 }
    29) { IDX: <null>, IDY: _#26, iX: <null>, iY: 26 }
    30) { IDX: <null>, IDY: _#27, iX: <null>, iY: 27 }
    31) { IDX: <null>, IDY: 19_#28, iX: <null>, iY: 28 }
    32) { IDX: <null>, IDY: 19_#29, iX: <null>, iY: 29 }
14) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: _#0, IDY: <null>, iX: 0, iY: <null> }
     1) { IDX: _#1, IDY: <null>, iX: 1, iY: <null> }
     2) { IDX: _#2, IDY: <null>, iX: 2, iY: <null> }
     3) { IDX: <null>, IDY: _#0, iX: <null>, iY: 0 }
     4) { IDX: <null>, IDY: _#1, iX: <null>, iY: 1 }
     5) { IDX: <null>, IDY: _#2, iX: <null>, iY: 2 }
15) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: _#0, IDY: <null>, iX: 0, iY: <null> }
     1) { IDX: _#1, IDY: <null>, iX: 1, iY: <null> }
     2) { IDX: _#2, IDY: <null>, iX: 2, iY: <null> }
     3) { IDX: <null>, IDY: 11_#0, iX: <null>, iY: 0 }
     4) { IDX: <null>, IDY: 12_#1, iX: <null>, iY: 1 }
     5) { IDX: <null>, IDY: 13_#2, iX: <null>, iY: 2 }
16) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: _#0, IDY: <null>, iX: 0, iY: <null> }
     1) { IDX: _#1, IDY: <null>, iX: 1, iY: <null> }
     2) { IDX: _#2, IDY: <null>, iX: 2, iY: <null> }
17) <null>
18) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: <null>, IDY: _#2, iX: <null>, iY: 2 }
     1) { IDX: <null>, IDY: _#7, iX: <null>, iY: 7 }
     2) { IDX: 11_#0, IDY: <null>, iX: 0, iY: <null> }
     3) { IDX: 12_#1, IDY: 12_#8, iX: 1, iY: 8 }
     4) { IDX: 13_#2, IDY: 13_#9, iX: 2, iY: 9 }
     5) { IDX: <null>, IDY: 0_#0, iX: <null>, iY: 0 }
     6) { IDX: <null>, IDY: 1_#1, iX: <null>, iY: 1 }
     7) { IDX: <null>, IDY: 4_#3, iX: <null>, iY: 3 }
     8) { IDX: <null>, IDY: 6_#4, iX: <null>, iY: 4 }
     9) { IDX: <null>, IDY: 7_#5, iX: <null>, iY: 5 }
    10) { IDX: <null>, IDY: 9_#6, iX: <null>, iY: 6 }
    11) { IDX: <null>, IDY: 15_#10, iX: <null>, iY: 10 }
    12) { IDX: <null>, IDY: 16_#11, iX: <null>, iY: 11 }
    13) { IDX: <null>, IDY: 18_#12, iX: <null>, iY: 12 }
    14) { IDX: <null>, IDY: 19_#13, iX: <null>, iY: 13 }
19) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: <null>, IDY: _#4, iX: <null>, iY: 4 }
     1) { IDX: <null>, IDY: _#5, iX: <null>, iY: 5 }
     2) { IDX: <null>, IDY: _#12, iX: <null>, iY: 12 }
     3) { IDX: <null>, IDY: _#13, iX: <null>, iY: 13 }
     4) { IDX: 11_#0, IDY: 11_#16, iX: 0, iY: 16 }
     5) { IDX: 11_#0, IDY: 11_#17, iX: 0, iY: 17 }
     6) { IDX: <null>, IDY: _#26, iX: <null>, iY: 26 }
     7) { IDX: <null>, IDY: _#27, iX: <null>, iY: 27 }
     8) { IDX: 12_#1, IDY: 12_#18, iX: 1, iY: 18 }
     9) { IDX: 12_#1, IDY: 12_#19, iX: 1, iY: 19 }
    10) { IDX: 13_#2, IDY: <null>, iX: 2, iY: <null> }
    11) { IDX: <null>, IDY: 0_#0, iX: <null>, iY: 0 }
    12) { IDX: <null>, IDY: 0_#1, iX: <null>, iY: 1 }
    13) { IDX: <null>, IDY: 2_#2, iX: <null>, iY: 2 }
    14) { IDX: <null>, IDY: 2_#3, iX: <null>, iY: 3 }
    15) { IDX: <null>, IDY: 4_#6, iX: <null>, iY: 6 }
    16) { IDX: <null>, IDY: 4_#7, iX: <null>, iY: 7 }
    17) { IDX: <null>, IDY: 6_#8, iX: <null>, iY: 8 }
    18) { IDX: <null>, IDY: 6_#9, iX: <null>, iY: 9 }
    19) { IDX: <null>, IDY: 7_#10, iX: <null>, iY: 10 }
    20) { IDX: <null>, IDY: 7_#11, iX: <null>, iY: 11 }
    21) { IDX: <null>, IDY: 10_#14, iX: <null>, iY: 14 }
    22) { IDX: <null>, IDY: 10_#15, iX: <null>, iY: 15 }
    23) { IDX: <null>, IDY: 14_#20, iX: <null>, iY: 20 }
    24) { IDX: <null>, IDY: 14_#21, iX: <null>, iY: 21 }
    25) { IDX: <null>, IDY: 15_#22, iX: <null>, iY: 22 }
    26) { IDX: <null>, IDY: 15_#23, iX: <null>, iY: 23 }
    27) { IDX: <null>, IDY: 16_#24, iX: <null>, iY: 24 }
    28) { IDX: <null>, IDY: 16_#25, iX: <null>, iY: 25 }
    29) { IDX: <null>, IDY: 19_#28, iX: <null>, iY: 28 }
    30) { IDX: <null>, IDY: 19_#29, iX: <null>, iY: 29 }
20) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: <null>, IDY: _#0, iX: <null>, iY: 0 }
     1) { IDX: <null>, IDY: _#1, iX: <null>, iY: 1 }
     2) { IDX: <null>, IDY: _#2, iX: <null>, iY: 2 }
     3) { IDX: 11_#0, IDY: <null>, iX: 0, iY: <null> }
     4) { IDX: 12_#1, IDY: <null>, iX: 1, iY: <null> }
     5) { IDX: 13_#2, IDY: <null>, iX: 2, iY: <null> }
21) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 11_#0, IDY: 11_#0, iX: 0, iY: 0 }
     1) { IDX: 12_#1, IDY: 12_#1, iX: 1, iY: 1 }
     2) { IDX: 13_#2, IDY: 13_#2, iX: 2, iY: 2 }
22) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: 11_#0, IDY: <null>, iX: 0, iY: <null> }
     1) { IDX: 12_#1, IDY: <null>, iX: 1, iY: <null> }
     2) { IDX: 13_#2, IDY: <null>, iX: 2, iY: <null> }
23) <null>
24) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: <null>, IDY: 0_#0, iX: <null>, iY: 0 }
     1) { IDX: <null>, IDY: 1_#1, iX: <null>, iY: 1 }
     2) { IDX: <null>, IDY: _#2, iX: <null>, iY: 2 }
     3) { IDX: <null>, IDY: 4_#3, iX: <null>, iY: 3 }
     4) { IDX: <null>, IDY: 6_#4, iX: <null>, iY: 4 }
     5) { IDX: <null>, IDY: 7_#5, iX: <null>, iY: 5 }
     6) { IDX: <null>, IDY: 9_#6, iX: <null>, iY: 6 }
     7) { IDX: <null>, IDY: _#7, iX: <null>, iY: 7 }
     8) { IDX: <null>, IDY: 12_#8, iX: <null>, iY: 8 }
     9) { IDX: <null>, IDY: 13_#9, iX: <null>, iY: 9 }
    10) { IDX: <null>, IDY: 15_#10, iX: <null>, iY: 10 }
    11) { IDX: <null>, IDY: 16_#11, iX: <null>, iY: 11 }
    12) { IDX: <null>, IDY: 18_#12, iX: <null>, iY: 12 }
    13) { IDX: <null>, IDY: 19_#13, iX: <null>, iY: 13 }
25) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: <null>, IDY: 0_#0, iX: <null>, iY: 0 }
     1) { IDX: <null>, IDY: 0_#1, iX: <null>, iY: 1 }
     2) { IDX: <null>, IDY: 2_#2, iX: <null>, iY: 2 }
     3) { IDX: <null>, IDY: 2_#3, iX: <null>, iY: 3 }
     4) { IDX: <null>, IDY: _#4, iX: <null>, iY: 4 }
     5) { IDX: <null>, IDY: _#5, iX: <null>, iY: 5 }
     6) { IDX: <null>, IDY: 4_#6, iX: <null>, iY: 6 }
     7) { IDX: <null>, IDY: 4_#7, iX: <null>, iY: 7 }
     8) { IDX: <null>, IDY: 6_#8, iX: <null>, iY: 8 }
     9) { IDX: <null>, IDY: 6_#9, iX: <null>, iY: 9 }
    10) { IDX: <null>, IDY: 7_#10, iX: <null>, iY: 10 }
    11) { IDX: <null>, IDY: 7_#11, iX: <null>, iY: 11 }
    12) { IDX: <null>, IDY: _#12, iX: <null>, iY: 12 }
    13) { IDX: <null>, IDY: _#13, iX: <null>, iY: 13 }
    14) { IDX: <null>, IDY: 10_#14, iX: <null>, iY: 14 }
    15) { IDX: <null>, IDY: 10_#15, iX: <null>, iY: 15 }
    16) { IDX: <null>, IDY: 11_#16, iX: <null>, iY: 16 }
    17) { IDX: <null>, IDY: 11_#17, iX: <null>, iY: 17 }
    18) { IDX: <null>, IDY: 12_#18, iX: <null>, iY: 18 }
    19) { IDX: <null>, IDY: 12_#19, iX: <null>, iY: 19 }
    20) { IDX: <null>, IDY: 14_#20, iX: <null>, iY: 20 }
    21) { IDX: <null>, IDY: 14_#21, iX: <null>, iY: 21 }
    22) { IDX: <null>, IDY: 15_#22, iX: <null>, iY: 22 }
    23) { IDX: <null>, IDY: 15_#23, iX: <null>, iY: 23 }
    24) { IDX: <null>, IDY: 16_#24, iX: <null>, iY: 24 }
    25) { IDX: <null>, IDY: 16_#25, iX: <null>, iY: 25 }
    26) { IDX: <null>, IDY: _#26, iX: <null>, iY: 26 }
    27) { IDX: <null>, IDY: _#27, iX: <null>, iY: 27 }
    28) { IDX: <null>, IDY: 19_#28, iX: <null>, iY: 28 }
    29) { IDX: <null>, IDY: 19_#29, iX: <null>, iY: 29 }
26) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: <null>, IDY: _#0, iX: <null>, iY: 0 }
     1) { IDX: <null>, IDY: _#1, iX: <null>, iY: 1 }
     2) { IDX: <null>, IDY: _#2, iX: <null>, iY: 2 }
27) Sequence: Seq<{str,str,i8,i8}>
     0) { IDX: <null>, IDY: 11_#0, iX: <null>, iY: 0 }
     1) { IDX: <null>, IDY: 12_#1, iX: <null>, iY: 1 }
     2) { IDX: <null>, IDY: 13_#2, iX: <null>, iY: 2 }
28) Sequence: Seq<{str,str,i8,i8}>
29) <null>
30) <null>
31) <null>
32) <null>
33) <null>
34) <null>
35) <null>
*** Ctx ping count: 157
    [0:3](108=0+0+108): KeyJoin(*4: *1x, *6: *2x, *4.V, *6.V, Ref<{IDX:s, IDY:s, iX:i8?, iY:i8?}>({IDX:*4.ID, IDY:*6.ID, iX:#3, iY:#5}), {IDX:*4.ID, iX:Opt<i8?>(#3)[, IDY:str(<null>), iY:null:i8?]}, {IDY:*6.ID, iY:Opt<i8?>(#5)[, IDX:str(<null>), iX:null:i8?]})
    [3:5](49=7+42): CrossJoin(*1: XSi, *2: YSi, true, KeyJoin(*4: *1, *6: *2, *4.V, *6.V, Ref<{IDX:s, IDY:s, iX:i8?, iY:i8?}>({IDX:*4.ID, IDY:*6.ID, iX:#3, iY:#5}), {IDX:*4.ID, iX:Opt<i8?>(#3)[, IDY:str(<null>), iY:null:i8?]}, {IDY:*6.ID, iY:Opt<i8?>(#5)[, IDX:str(<null>), iX:null:i8?]}))
###
> CrossJoin(X:XSi, Y:YSi, true,   KeyJoin(x:X, y:Y,           V,    V , { iX: #x, IDX:x.ID,         IDY:y.ID }, { iX: #, IDX:ID }, {        IDY:ID }))
CrossJoin(X : XSi, Y : YSi, true, KeyJoin(x : X, y : Y, V, V, { iX : #x, IDX : x.ID, IDY : y.ID }, { iX : #, IDX : ID }, { IDY : ID })) : {IDX:s, IDY:s, iX:i8?}**
BndKind:Call, Type:{IDX:s, IDY:s, iX:i8?}**, Bnd:(Call(∂.CrossJoin([map:1] Global(XSi), [map:2] Global(YSi), true:b, Call(∂.KeyJoin([map:4] Scope(1), [map:5] Scope(2), GetField(Scope(4), V), GetField(Scope(5), V), Ref<{IDX:s, IDY:s, iX:i8?}>({IDX:GetField(Scope(4), ID), IDY:GetField(Scope(5), ID), iX:Scope(3)}), {IDX:GetField(Scope(4), ID), iX:Opt<i8?>(Scope(3))[, IDY:str(<null>)]}, {IDY:GetField(Scope(5), ID)[, IDX:str(<null>), iX:null:i8?]})))))
// (<ctx>, ∂.XSi:{ID:s, V:i8?}**, ∂.YSi:{ID:s, V:i8?}**) : {IDX:s, IDY:s, iX:i8?}**
CrossJoin_2(Arr<obj>, Seq<{str,i8}>, Seq<{str,i8}>):bool
      1) ldc.i4.1
      1) ret
  Total Size: 2

KeyJoin_2(Arr<obj>, i8, {str,i8}):Opt<i8>
      1) ldarg.2 [{str,i8}]
      1) dup
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      5) ldfld {str,i8}::_F1:i8
      5) newobj Opt<i8>(i8)
      5) br [1]
  Label [0]:
      1) pop
      5) call static CodeGenUtil::GetDefault():Opt<i8>
  Label [1]:
      1) ret
  Total Size: 36

KeyJoin_3(Arr<obj>, i8, {str,i8}):Opt<i8>
      1) ldarg.2 [{str,i8}]
      1) dup
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      5) ldfld {str,i8}::_F1:i8
      5) newobj Opt<i8>(i8)
      5) br [1]
  Label [0]:
      1) pop
      5) call static CodeGenUtil::GetDefault():Opt<i8>
  Label [1]:
      1) ret
  Total Size: 36

KeyJoin_4(Arr<obj>, i8, {str,i8}, i8, {str,i8}):{str,str,i8}
      5) newobj {str,str,i8}()
      1) dup
      1) ldc.i4.7
      5) stfld {str,str,i8}::_B0:u1
      1) stloc.0 [{str,str,i8}]
      1) ldloc.0 [{str,str,i8}]
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8}::_F0:str
      1) ldloc.0 [{str,str,i8}]
      2) ldarg.s [{str,i8} (4)]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8}::_F1:str
      1) ldloc.0 [{str,str,i8}]
      1) ldarg.1 [i8]
      5) stfld {str,str,i8}::_F2:i8
      1) ldloc.0 [{str,str,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 60

KeyJoin_5(Arr<obj>, i8, {str,i8}):{str,str,i8}
      5) newobj {str,str,i8}()
      1) dup
      1) ldc.i4.3
      5) stfld {str,str,i8}::_B0:u1
      1) stloc.0 [{str,str,i8}]
      1) ldloc.0 [{str,str,i8}]
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8}::_F0:str
      1) ldloc.0 [{str,str,i8}]
      1) ldarg.1 [i8]
      5) stfld {str,str,i8}::_F2:i8
      1) ldloc.0 [{str,str,i8}]
      1) dup
      5) ldfld {str,str,i8}::_B0:u1
      1) ldc.i4.4
      1) or
      5) stfld {str,str,i8}::_B0:u1
      1) ldloc.0 [{str,str,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 61

KeyJoin_6(Arr<obj>, i8, {str,i8}):{str,str,i8}
      5) newobj {str,str,i8}()
      1) dup
      1) ldc.i4.3
      5) stfld {str,str,i8}::_B0:u1
      1) stloc.0 [{str,str,i8}]
      1) ldloc.0 [{str,str,i8}]
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8}::_F1:str
      1) ldloc.0 [{str,str,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 40

CrossJoin_3(Arr<obj>, Seq<{str,i8}>, Seq<{str,i8}>):Seq<{str,str,i8}>
      1) ldarg.1 [Seq<{str,i8}>]
      1) ldarg.2 [Seq<{str,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<i8,{str,i8},Opt<i8>>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [Func<i8,{str,i8},Opt<i8>>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Func<i8,{str,i8},i8,{str,i8},{str,str,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.3
      5) ldelem [Func<i8,{str,i8},{str,str,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.4
      5) ldelem [Func<i8,{str,i8},{str,str,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.5
      5) ldelem [EqualityComparer<Opt<i8>>]
      1) ldc.i4.1
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [ExecCtx]
      1) ldc.i4.0
      5) call static KeyJoinGen::ExecInd(Seq<{str,i8}>, Seq<{str,i8}>, Func<i8,{str,i8},Opt<i8>>, Func<i8,{str,i8},Opt<i8>>, Func<i8,{str,i8},i8,{str,i8},{str,str,i8}>, Func<i8,{str,i8},{str,str,i8}>, Func<i8,{str,i8},{str,str,i8}>, EqualityComparer<Opt<i8>>, bool, ExecCtx, i4):Seq<{str,str,i8}>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<{str,str,i8}>):Seq<{str,str,i8}>
      1) ret
  Total Size: 100

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):ExecCtx
      1) stloc.0 [ExecCtx]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<Seq<{str,i8}>>
      1) stloc.1 [Seq<Seq<{str,i8}>>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.2
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<Seq<{str,i8}>>
      1) stloc.2 [Seq<Seq<{str,i8}>>]
      1) ldloc.1 [Seq<Seq<{str,i8}>>]
      1) ldloc.2 [Seq<Seq<{str,i8}>>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<Seq<{str,i8}>,Seq<{str,i8}>,bool>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [MethodInfo]
      5) ldtoken [Func<Seq<{str,i8}>,Seq<{str,i8}>,Seq<{str,str,i8}>>]
      5) call static Type::GetTypeFromHandle(RuntimeTypeHandle):Type
      1) ldc.i4.2
      5) newarr [obj]
      1) dup
      1) ldc.i4.0
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Arr<obj>]
      5) stelem [Arr<obj>]
      1) dup
      1) ldc.i4.1
      1) ldloc.0 [ExecCtx]
      5) stelem [ExecCtx]
      5) callvirt DynamicMethod::CreateDelegate(Type, obj):Delegate
      1) ldloc.0 [ExecCtx]
      1) ldc.i4.3
      5) call static CrossJoinGen::Exec(Seq<Seq<{str,i8}>>, Seq<Seq<{str,i8}>>, Func<Seq<{str,i8}>,Seq<{str,i8}>,bool>, Func<Seq<{str,i8}>,Seq<{str,i8}>,Seq<{str,str,i8}>>, ExecCtx, i4):Seq<Seq<{str,str,i8}>>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<Seq<{str,str,i8}>>):Seq<Seq<{str,str,i8}>>
      1) ret
  Total Size: 99

Func sig: (<ctx>:x, XSi:{ID:s, V:i8?}**, YSi:{ID:s, V:i8?}**) to {IDX:s, IDY:s, iX:i8?}**
Sequence: Seq<Seq<{str,str,i8}>>
 0) Sequence: Seq<{str,str,i8}>
     0) { IDX: 0_#0, IDY: 0_#0, iX: 0 }
     1) { IDX: <null>, IDY: _#2, iX: <null> }
     2) { IDX: <null>, IDY: _#7, iX: <null> }
     3) { IDX: 1_#1, IDY: 1_#1, iX: 1 }
     4) { IDX: _#2, IDY: <null>, iX: 2 }
     5) { IDX: 4_#3, IDY: 4_#3, iX: 3 }
     6) { IDX: 6_#4, IDY: 6_#4, iX: 4 }
     7) { IDX: 7_#5, IDY: 7_#5, iX: 5 }
     8) { IDX: 9_#6, IDY: 9_#6, iX: 6 }
     9) { IDX: _#7, IDY: <null>, iX: 7 }
    10) { IDX: 12_#8, IDY: 12_#8, iX: 8 }
    11) { IDX: 13_#9, IDY: 13_#9, iX: 9 }
    12) { IDX: 15_#10, IDY: 15_#10, iX: 10 }
    13) { IDX: 16_#11, IDY: 16_#11, iX: 11 }
    14) { IDX: 18_#12, IDY: 18_#12, iX: 12 }
    15) { IDX: 19_#13, IDY: 19_#13, iX: 13 }
 1) Sequence: Seq<{str,str,i8}>
     0) { IDX: 0_#0, IDY: 0_#0, iX: 0 }
     1) { IDX: 0_#0, IDY: 0_#1, iX: 0 }
     2) { IDX: <null>, IDY: _#4, iX: <null> }
     3) { IDX: <null>, IDY: _#5, iX: <null> }
     4) { IDX: <null>, IDY: _#12, iX: <null> }
     5) { IDX: <null>, IDY: _#13, iX: <null> }
     6) { IDX: <null>, IDY: _#26, iX: <null> }
     7) { IDX: <null>, IDY: _#27, iX: <null> }
     8) { IDX: 1_#1, IDY: <null>, iX: 1 }
     9) { IDX: _#2, IDY: <null>, iX: 2 }
    10) { IDX: 4_#3, IDY: 4_#6, iX: 3 }
    11) { IDX: 4_#3, IDY: 4_#7, iX: 3 }
    12) { IDX: 6_#4, IDY: 6_#8, iX: 4 }
    13) { IDX: 6_#4, IDY: 6_#9, iX: 4 }
    14) { IDX: 7_#5, IDY: 7_#10, iX: 5 }
    15) { IDX: 7_#5, IDY: 7_#11, iX: 5 }
    16) { IDX: 9_#6, IDY: <null>, iX: 6 }
    17) { IDX: _#7, IDY: <null>, iX: 7 }
    18) { IDX: 12_#8, IDY: 12_#18, iX: 8 }
    19) { IDX: 12_#8, IDY: 12_#19, iX: 8 }
    20) { IDX: 13_#9, IDY: <null>, iX: 9 }
    21) { IDX: 15_#10, IDY: 15_#22, iX: 10 }
    22) { IDX: 15_#10, IDY: 15_#23, iX: 10 }
    23) { IDX: 16_#11, IDY: 16_#24, iX: 11 }
    24) { IDX: 16_#11, IDY: 16_#25, iX: 11 }
    25) { IDX: 18_#12, IDY: <null>, iX: 12 }
    26) { IDX: 19_#13, IDY: 19_#28, iX: 13 }
    27) { IDX: 19_#13, IDY: 19_#29, iX: 13 }
    28) { IDX: <null>, IDY: 2_#2, iX: <null> }
    29) { IDX: <null>, IDY: 2_#3, iX: <null> }
    30) { IDX: <null>, IDY: 10_#14, iX: <null> }
    31) { IDX: <null>, IDY: 10_#15, iX: <null> }
    32) { IDX: <null>, IDY: 11_#16, iX: <null> }
    33) { IDX: <null>, IDY: 11_#17, iX: <null> }
    34) { IDX: <null>, IDY: 14_#20, iX: <null> }
    35) { IDX: <null>, IDY: 14_#21, iX: <null> }
 2) Sequence: Seq<{str,str,i8}>
     0) { IDX: <null>, IDY: _#0, iX: <null> }
     1) { IDX: <null>, IDY: _#1, iX: <null> }
     2) { IDX: <null>, IDY: _#2, iX: <null> }
     3) { IDX: 0_#0, IDY: <null>, iX: 0 }
     4) { IDX: 1_#1, IDY: <null>, iX: 1 }
     5) { IDX: _#2, IDY: <null>, iX: 2 }
     6) { IDX: 4_#3, IDY: <null>, iX: 3 }
     7) { IDX: 6_#4, IDY: <null>, iX: 4 }
     8) { IDX: 7_#5, IDY: <null>, iX: 5 }
     9) { IDX: 9_#6, IDY: <null>, iX: 6 }
    10) { IDX: _#7, IDY: <null>, iX: 7 }
    11) { IDX: 12_#8, IDY: <null>, iX: 8 }
    12) { IDX: 13_#9, IDY: <null>, iX: 9 }
    13) { IDX: 15_#10, IDY: <null>, iX: 10 }
    14) { IDX: 16_#11, IDY: <null>, iX: 11 }
    15) { IDX: 18_#12, IDY: <null>, iX: 12 }
    16) { IDX: 19_#13, IDY: <null>, iX: 13 }
 3) Sequence: Seq<{str,str,i8}>
     0) { IDX: 0_#0, IDY: <null>, iX: 0 }
     1) { IDX: 1_#1, IDY: <null>, iX: 1 }
     2) { IDX: _#2, IDY: <null>, iX: 2 }
     3) { IDX: 4_#3, IDY: <null>, iX: 3 }
     4) { IDX: 6_#4, IDY: <null>, iX: 4 }
     5) { IDX: 7_#5, IDY: <null>, iX: 5 }
     6) { IDX: 9_#6, IDY: <null>, iX: 6 }
     7) { IDX: _#7, IDY: <null>, iX: 7 }
     8) { IDX: 12_#8, IDY: 12_#1, iX: 8 }
     9) { IDX: 13_#9, IDY: 13_#2, iX: 9 }
    10) { IDX: 15_#10, IDY: <null>, iX: 10 }
    11) { IDX: 16_#11, IDY: <null>, iX: 11 }
    12) { IDX: 18_#12, IDY: <null>, iX: 12 }
    13) { IDX: 19_#13, IDY: <null>, iX: 13 }
    14) { IDX: <null>, IDY: 11_#0, iX: <null> }
 4) Sequence: Seq<{str,str,i8}>
     0) { IDX: 0_#0, IDY: <null>, iX: 0 }
     1) { IDX: 1_#1, IDY: <null>, iX: 1 }
     2) { IDX: _#2, IDY: <null>, iX: 2 }
     3) { IDX: 4_#3, IDY: <null>, iX: 3 }
     4) { IDX: 6_#4, IDY: <null>, iX: 4 }
     5) { IDX: 7_#5, IDY: <null>, iX: 5 }
     6) { IDX: 9_#6, IDY: <null>, iX: 6 }
     7) { IDX: _#7, IDY: <null>, iX: 7 }
     8) { IDX: 12_#8, IDY: <null>, iX: 8 }
     9) { IDX: 13_#9, IDY: <null>, iX: 9 }
    10) { IDX: 15_#10, IDY: <null>, iX: 10 }
    11) { IDX: 16_#11, IDY: <null>, iX: 11 }
    12) { IDX: 18_#12, IDY: <null>, iX: 12 }
    13) { IDX: 19_#13, IDY: <null>, iX: 13 }
 5) <null>
 6) Sequence: Seq<{str,str,i8}>
     0) { IDX: 0_#0, IDY: 0_#0, iX: 0 }
     1) { IDX: <null>, IDY: _#2, iX: <null> }
     2) { IDX: <null>, IDY: _#7, iX: <null> }
     3) { IDX: 0_#1, IDY: 0_#0, iX: 1 }
     4) { IDX: 2_#2, IDY: <null>, iX: 2 }
     5) { IDX: 2_#3, IDY: <null>, iX: 3 }
     6) { IDX: _#4, IDY: <null>, iX: 4 }
     7) { IDX: _#5, IDY: <null>, iX: 5 }
     8) { IDX: 4_#6, IDY: 4_#3, iX: 6 }
     9) { IDX: 4_#7, IDY: 4_#3, iX: 7 }
    10) { IDX: 6_#8, IDY: 6_#4, iX: 8 }
    11) { IDX: 6_#9, IDY: 6_#4, iX: 9 }
    12) { IDX: 7_#10, IDY: 7_#5, iX: 10 }
    13) { IDX: 7_#11, IDY: 7_#5, iX: 11 }
    14) { IDX: _#12, IDY: <null>, iX: 12 }
    15) { IDX: _#13, IDY: <null>, iX: 13 }
    16) { IDX: 10_#14, IDY: <null>, iX: 14 }
    17) { IDX: 10_#15, IDY: <null>, iX: 15 }
    18) { IDX: 11_#16, IDY: <null>, iX: 16 }
    19) { IDX: 11_#17, IDY: <null>, iX: 17 }
    20) { IDX: 12_#18, IDY: 12_#8, iX: 18 }
    21) { IDX: 12_#19, IDY: 12_#8, iX: 19 }
    22) { IDX: 14_#20, IDY: <null>, iX: 20 }
    23) { IDX: 14_#21, IDY: <null>, iX: 21 }
    24) { IDX: 15_#22, IDY: 15_#10, iX: 22 }
    25) { IDX: 15_#23, IDY: 15_#10, iX: 23 }
    26) { IDX: 16_#24, IDY: 16_#11, iX: 24 }
    27) { IDX: 16_#25, IDY: 16_#11, iX: 25 }
    28) { IDX: _#26, IDY: <null>, iX: 26 }
    29) { IDX: _#27, IDY: <null>, iX: 27 }
    30) { IDX: 19_#28, IDY: 19_#13, iX: 28 }
    31) { IDX: 19_#29, IDY: 19_#13, iX: 29 }
    32) { IDX: <null>, IDY: 1_#1, iX: <null> }
    33) { IDX: <null>, IDY: 9_#6, iX: <null> }
    34) { IDX: <null>, IDY: 13_#9, iX: <null> }
    35) { IDX: <null>, IDY: 18_#12, iX: <null> }
 7) Sequence: Seq<{str,str,i8}>
     0) { IDX: 0_#0, IDY: 0_#0, iX: 0 }
     1) { IDX: 0_#0, IDY: 0_#1, iX: 0 }
     2) { IDX: <null>, IDY: _#4, iX: <null> }
     3) { IDX: <null>, IDY: _#5, iX: <null> }
     4) { IDX: <null>, IDY: _#12, iX: <null> }
     5) { IDX: <null>, IDY: _#13, iX: <null> }
     6) { IDX: <null>, IDY: _#26, iX: <null> }
     7) { IDX: <null>, IDY: _#27, iX: <null> }
     8) { IDX: 0_#1, IDY: 0_#0, iX: 1 }
     9) { IDX: 0_#1, IDY: 0_#1, iX: 1 }
    10) { IDX: 2_#2, IDY: 2_#2, iX: 2 }
    11) { IDX: 2_#2, IDY: 2_#3, iX: 2 }
    12) { IDX: 2_#3, IDY: 2_#2, iX: 3 }
    13) { IDX: 2_#3, IDY: 2_#3, iX: 3 }
    14) { IDX: _#4, IDY: <null>, iX: 4 }
    15) { IDX: _#5, IDY: <null>, iX: 5 }
    16) { IDX: 4_#6, IDY: 4_#6, iX: 6 }
    17) { IDX: 4_#6, IDY: 4_#7, iX: 6 }
    18) { IDX: 4_#7, IDY: 4_#6, iX: 7 }
    19) { IDX: 4_#7, IDY: 4_#7, iX: 7 }
    20) { IDX: 6_#8, IDY: 6_#8, iX: 8 }
    21) { IDX: 6_#8, IDY: 6_#9, iX: 8 }
    22) { IDX: 6_#9, IDY: 6_#8, iX: 9 }
    23) { IDX: 6_#9, IDY: 6_#9, iX: 9 }
    24) { IDX: 7_#10, IDY: 7_#10, iX: 10 }
    25) { IDX: 7_#10, IDY: 7_#11, iX: 10 }
    26) { IDX: 7_#11, IDY: 7_#10, iX: 11 }
    27) { IDX: 7_#11, IDY: 7_#11, iX: 11 }
    28) { IDX: _#12, IDY: <null>, iX: 12 }
    29) { IDX: _#13, IDY: <null>, iX: 13 }
    30) { IDX: 10_#14, IDY: 10_#14, iX: 14 }
    31) { IDX: 10_#14, IDY: 10_#15, iX: 14 }
    32) { IDX: 10_#15, IDY: 10_#14, iX: 15 }
    33) { IDX: 10_#15, IDY: 10_#15, iX: 15 }
    34) { IDX: 11_#16, IDY: 11_#16, iX: 16 }
    35) { IDX: 11_#16, IDY: 11_#17, iX: 16 }
    36) { IDX: 11_#17, IDY: 11_#16, iX: 17 }
    37) { IDX: 11_#17, IDY: 11_#17, iX: 17 }
    38) { IDX: 12_#18, IDY: 12_#18, iX: 18 }
    39) { IDX: 12_#18, IDY: 12_#19, iX: 18 }
    40) { IDX: 12_#19, IDY: 12_#18, iX: 19 }
    41) { IDX: 12_#19, IDY: 12_#19, iX: 19 }
    42) { IDX: 14_#20, IDY: 14_#20, iX: 20 }
    43) { IDX: 14_#20, IDY: 14_#21, iX: 20 }
    44) { IDX: 14_#21, IDY: 14_#20, iX: 21 }
    45) { IDX: 14_#21, IDY: 14_#21, iX: 21 }
    46) { IDX: 15_#22, IDY: 15_#22, iX: 22 }
    47) { IDX: 15_#22, IDY: 15_#23, iX: 22 }
    48) { IDX: 15_#23, IDY: 15_#22, iX: 23 }
    49) { IDX: 15_#23, IDY: 15_#23, iX: 23 }
    50) { IDX: 16_#24, IDY: 16_#24, iX: 24 }
    51) { IDX: 16_#24, IDY: 16_#25, iX: 24 }
    52) { IDX: 16_#25, IDY: 16_#24, iX: 25 }
    53) { IDX: 16_#25, IDY: 16_#25, iX: 25 }
    54) { IDX: _#26, IDY: <null>, iX: 26 }
    55) { IDX: _#27, IDY: <null>, iX: 27 }
    56) { IDX: 19_#28, IDY: 19_#28, iX: 28 }
    57) { IDX: 19_#28, IDY: 19_#29, iX: 28 }
    58) { IDX: 19_#29, IDY: 19_#28, iX: 29 }
    59) { IDX: 19_#29, IDY: 19_#29, iX: 29 }
 8) Sequence: Seq<{str,str,i8}>
     0) { IDX: <null>, IDY: _#0, iX: <null> }
     1) { IDX: <null>, IDY: _#1, iX: <null> }
     2) { IDX: <null>, IDY: _#2, iX: <null> }
     3) { IDX: 0_#0, IDY: <null>, iX: 0 }
     4) { IDX: 0_#1, IDY: <null>, iX: 1 }
     5) { IDX: 2_#2, IDY: <null>, iX: 2 }
     6) { IDX: 2_#3, IDY: <null>, iX: 3 }
     7) { IDX: _#4, IDY: <null>, iX: 4 }
     8) { IDX: _#5, IDY: <null>, iX: 5 }
     9) { IDX: 4_#6, IDY: <null>, iX: 6 }
    10) { IDX: 4_#7, IDY: <null>, iX: 7 }
    11) { IDX: 6_#8, IDY: <null>, iX: 8 }
    12) { IDX: 6_#9, IDY: <null>, iX: 9 }
    13) { IDX: 7_#10, IDY: <null>, iX: 10 }
    14) { IDX: 7_#11, IDY: <null>, iX: 11 }
    15) { IDX: _#12, IDY: <null>, iX: 12 }
    16) { IDX: _#13, IDY: <null>, iX: 13 }
    17) { IDX: 10_#14, IDY: <null>, iX: 14 }
    18) { IDX: 10_#15, IDY: <null>, iX: 15 }
    19) { IDX: 11_#16, IDY: <null>, iX: 16 }
    20) { IDX: 11_#17, IDY: <null>, iX: 17 }
    21) { IDX: 12_#18, IDY: <null>, iX: 18 }
    22) { IDX: 12_#19, IDY: <null>, iX: 19 }
    23) { IDX: 14_#20, IDY: <null>, iX: 20 }
    24) { IDX: 14_#21, IDY: <null>, iX: 21 }
    25) { IDX: 15_#22, IDY: <null>, iX: 22 }
    26) { IDX: 15_#23, IDY: <null>, iX: 23 }
    27) { IDX: 16_#24, IDY: <null>, iX: 24 }
    28) { IDX: 16_#25, IDY: <null>, iX: 25 }
    29) { IDX: _#26, IDY: <null>, iX: 26 }
    30) { IDX: _#27, IDY: <null>, iX: 27 }
    31) { IDX: 19_#28, IDY: <null>, iX: 28 }
    32) { IDX: 19_#29, IDY: <null>, iX: 29 }
 9) Sequence: Seq<{str,str,i8}>
     0) { IDX: 0_#0, IDY: <null>, iX: 0 }
     1) { IDX: 0_#1, IDY: <null>, iX: 1 }
     2) { IDX: 2_#2, IDY: <null>, iX: 2 }
     3) { IDX: 2_#3, IDY: <null>, iX: 3 }
     4) { IDX: _#4, IDY: <null>, iX: 4 }
     5) { IDX: _#5, IDY: <null>, iX: 5 }
     6) { IDX: 4_#6, IDY: <null>, iX: 6 }
     7) { IDX: 4_#7, IDY: <null>, iX: 7 }
     8) { IDX: 6_#8, IDY: <null>, iX: 8 }
     9) { IDX: 6_#9, IDY: <null>, iX: 9 }
    10) { IDX: 7_#10, IDY: <null>, iX: 10 }
    11) { IDX: 7_#11, IDY: <null>, iX: 11 }
    12) { IDX: _#12, IDY: <null>, iX: 12 }
    13) { IDX: _#13, IDY: <null>, iX: 13 }
    14) { IDX: 10_#14, IDY: <null>, iX: 14 }
    15) { IDX: 10_#15, IDY: <null>, iX: 15 }
    16) { IDX: 11_#16, IDY: 11_#0, iX: 16 }
    17) { IDX: 11_#17, IDY: 11_#0, iX: 17 }
    18) { IDX: 12_#18, IDY: 12_#1, iX: 18 }
    19) { IDX: 12_#19, IDY: 12_#1, iX: 19 }
    20) { IDX: 14_#20, IDY: <null>, iX: 20 }
    21) { IDX: 14_#21, IDY: <null>, iX: 21 }
    22) { IDX: 15_#22, IDY: <null>, iX: 22 }
    23) { IDX: 15_#23, IDY: <null>, iX: 23 }
    24) { IDX: 16_#24, IDY: <null>, iX: 24 }
    25) { IDX: 16_#25, IDY: <null>, iX: 25 }
    26) { IDX: _#26, IDY: <null>, iX: 26 }
    27) { IDX: _#27, IDY: <null>, iX: 27 }
    28) { IDX: 19_#28, IDY: <null>, iX: 28 }
    29) { IDX: 19_#29, IDY: <null>, iX: 29 }
    30) { IDX: <null>, IDY: 13_#2, iX: <null> }
10) Sequence: Seq<{str,str,i8}>
     0) { IDX: 0_#0, IDY: <null>, iX: 0 }
     1) { IDX: 0_#1, IDY: <null>, iX: 1 }
     2) { IDX: 2_#2, IDY: <null>, iX: 2 }
     3) { IDX: 2_#3, IDY: <null>, iX: 3 }
     4) { IDX: _#4, IDY: <null>, iX: 4 }
     5) { IDX: _#5, IDY: <null>, iX: 5 }
     6) { IDX: 4_#6, IDY: <null>, iX: 6 }
     7) { IDX: 4_#7, IDY: <null>, iX: 7 }
     8) { IDX: 6_#8, IDY: <null>, iX: 8 }
     9) { IDX: 6_#9, IDY: <null>, iX: 9 }
    10) { IDX: 7_#10, IDY: <null>, iX: 10 }
    11) { IDX: 7_#11, IDY: <null>, iX: 11 }
    12) { IDX: _#12, IDY: <null>, iX: 12 }
    13) { IDX: _#13, IDY: <null>, iX: 13 }
    14) { IDX: 10_#14, IDY: <null>, iX: 14 }
    15) { IDX: 10_#15, IDY: <null>, iX: 15 }
    16) { IDX: 11_#16, IDY: <null>, iX: 16 }
    17) { IDX: 11_#17, IDY: <null>, iX: 17 }
    18) { IDX: 12_#18, IDY: <null>, iX: 18 }
    19) { IDX: 12_#19, IDY: <null>, iX: 19 }
    20) { IDX: 14_#20, IDY: <null>, iX: 20 }
    21) { IDX: 14_#21, IDY: <null>, iX: 21 }
    22) { IDX: 15_#22, IDY: <null>, iX: 22 }
    23) { IDX: 15_#23, IDY: <null>, iX: 23 }
    24) { IDX: 16_#24, IDY: <null>, iX: 24 }
    25) { IDX: 16_#25, IDY: <null>, iX: 25 }
    26) { IDX: _#26, IDY: <null>, iX: 26 }
    27) { IDX: _#27, IDY: <null>, iX: 27 }
    28) { IDX: 19_#28, IDY: <null>, iX: 28 }
    29) { IDX: 19_#29, IDY: <null>, iX: 29 }
11) <null>
12) Sequence: Seq<{str,str,i8}>
     0) { IDX: _#0, IDY: <null>, iX: 0 }
     1) { IDX: _#1, IDY: <null>, iX: 1 }
     2) { IDX: _#2, IDY: <null>, iX: 2 }
     3) { IDX: <null>, IDY: 0_#0, iX: <null> }
     4) { IDX: <null>, IDY: 1_#1, iX: <null> }
     5) { IDX: <null>, IDY: _#2, iX: <null> }
     6) { IDX: <null>, IDY: 4_#3, iX: <null> }
     7) { IDX: <null>, IDY: 6_#4, iX: <null> }
     8) { IDX: <null>, IDY: 7_#5, iX: <null> }
     9) { IDX: <null>, IDY: 9_#6, iX: <null> }
    10) { IDX: <null>, IDY: _#7, iX: <null> }
    11) { IDX: <null>, IDY: 12_#8, iX: <null> }
    12) { IDX: <null>, IDY: 13_#9, iX: <null> }
    13) { IDX: <null>, IDY: 15_#10, iX: <null> }
    14) { IDX: <null>, IDY: 16_#11, iX: <null> }
    15) { IDX: <null>, IDY: 18_#12, iX: <null> }
    16) { IDX: <null>, IDY: 19_#13, iX: <null> }
13) Sequence: Seq<{str,str,i8}>
     0) { IDX: _#0, IDY: <null>, iX: 0 }
     1) { IDX: _#1, IDY: <null>, iX: 1 }
     2) { IDX: _#2, IDY: <null>, iX: 2 }
     3) { IDX: <null>, IDY: 0_#0, iX: <null> }
     4) { IDX: <null>, IDY: 0_#1, iX: <null> }
     5) { IDX: <null>, IDY: 2_#2, iX: <null> }
     6) { IDX: <null>, IDY: 2_#3, iX: <null> }
     7) { IDX: <null>, IDY: _#4, iX: <null> }
     8) { IDX: <null>, IDY: _#5, iX: <null> }
     9) { IDX: <null>, IDY: 4_#6, iX: <null> }
    10) { IDX: <null>, IDY: 4_#7, iX: <null> }
    11) { IDX: <null>, IDY: 6_#8, iX: <null> }
    12) { IDX: <null>, IDY: 6_#9, iX: <null> }
    13) { IDX: <null>, IDY: 7_#10, iX: <null> }
    14) { IDX: <null>, IDY: 7_#11, iX: <null> }
    15) { IDX: <null>, IDY: _#12, iX: <null> }
    16) { IDX: <null>, IDY: _#13, iX: <null> }
    17) { IDX: <null>, IDY: 10_#14, iX: <null> }
    18) { IDX: <null>, IDY: 10_#15, iX: <null> }
    19) { IDX: <null>, IDY: 11_#16, iX: <null> }
    20) { IDX: <null>, IDY: 11_#17, iX: <null> }
    21) { IDX: <null>, IDY: 12_#18, iX: <null> }
    22) { IDX: <null>, IDY: 12_#19, iX: <null> }
    23) { IDX: <null>, IDY: 14_#20, iX: <null> }
    24) { IDX: <null>, IDY: 14_#21, iX: <null> }
    25) { IDX: <null>, IDY: 15_#22, iX: <null> }
    26) { IDX: <null>, IDY: 15_#23, iX: <null> }
    27) { IDX: <null>, IDY: 16_#24, iX: <null> }
    28) { IDX: <null>, IDY: 16_#25, iX: <null> }
    29) { IDX: <null>, IDY: _#26, iX: <null> }
    30) { IDX: <null>, IDY: _#27, iX: <null> }
    31) { IDX: <null>, IDY: 19_#28, iX: <null> }
    32) { IDX: <null>, IDY: 19_#29, iX: <null> }
14) Sequence: Seq<{str,str,i8}>
     0) { IDX: _#0, IDY: <null>, iX: 0 }
     1) { IDX: _#1, IDY: <null>, iX: 1 }
     2) { IDX: _#2, IDY: <null>, iX: 2 }
     3) { IDX: <null>, IDY: _#0, iX: <null> }
     4) { IDX: <null>, IDY: _#1, iX: <null> }
     5) { IDX: <null>, IDY: _#2, iX: <null> }
15) Sequence: Seq<{str,str,i8}>
     0) { IDX: _#0, IDY: <null>, iX: 0 }
     1) { IDX: _#1, IDY: <null>, iX: 1 }
     2) { IDX: _#2, IDY: <null>, iX: 2 }
     3) { IDX: <null>, IDY: 11_#0, iX: <null> }
     4) { IDX: <null>, IDY: 12_#1, iX: <null> }
     5) { IDX: <null>, IDY: 13_#2, iX: <null> }
16) Sequence: Seq<{str,str,i8}>
     0) { IDX: _#0, IDY: <null>, iX: 0 }
     1) { IDX: _#1, IDY: <null>, iX: 1 }
     2) { IDX: _#2, IDY: <null>, iX: 2 }
17) <null>
18) Sequence: Seq<{str,str,i8}>
     0) { IDX: <null>, IDY: _#2, iX: <null> }
     1) { IDX: <null>, IDY: _#7, iX: <null> }
     2) { IDX: 11_#0, IDY: <null>, iX: 0 }
     3) { IDX: 12_#1, IDY: 12_#8, iX: 1 }
     4) { IDX: 13_#2, IDY: 13_#9, iX: 2 }
     5) { IDX: <null>, IDY: 0_#0, iX: <null> }
     6) { IDX: <null>, IDY: 1_#1, iX: <null> }
     7) { IDX: <null>, IDY: 4_#3, iX: <null> }
     8) { IDX: <null>, IDY: 6_#4, iX: <null> }
     9) { IDX: <null>, IDY: 7_#5, iX: <null> }
    10) { IDX: <null>, IDY: 9_#6, iX: <null> }
    11) { IDX: <null>, IDY: 15_#10, iX: <null> }
    12) { IDX: <null>, IDY: 16_#11, iX: <null> }
    13) { IDX: <null>, IDY: 18_#12, iX: <null> }
    14) { IDX: <null>, IDY: 19_#13, iX: <null> }
19) Sequence: Seq<{str,str,i8}>
     0) { IDX: <null>, IDY: _#4, iX: <null> }
     1) { IDX: <null>, IDY: _#5, iX: <null> }
     2) { IDX: <null>, IDY: _#12, iX: <null> }
     3) { IDX: <null>, IDY: _#13, iX: <null> }
     4) { IDX: 11_#0, IDY: 11_#16, iX: 0 }
     5) { IDX: 11_#0, IDY: 11_#17, iX: 0 }
     6) { IDX: <null>, IDY: _#26, iX: <null> }
     7) { IDX: <null>, IDY: _#27, iX: <null> }
     8) { IDX: 12_#1, IDY: 12_#18, iX: 1 }
     9) { IDX: 12_#1, IDY: 12_#19, iX: 1 }
    10) { IDX: 13_#2, IDY: <null>, iX: 2 }
    11) { IDX: <null>, IDY: 0_#0, iX: <null> }
    12) { IDX: <null>, IDY: 0_#1, iX: <null> }
    13) { IDX: <null>, IDY: 2_#2, iX: <null> }
    14) { IDX: <null>, IDY: 2_#3, iX: <null> }
    15) { IDX: <null>, IDY: 4_#6, iX: <null> }
    16) { IDX: <null>, IDY: 4_#7, iX: <null> }
    17) { IDX: <null>, IDY: 6_#8, iX: <null> }
    18) { IDX: <null>, IDY: 6_#9, iX: <null> }
    19) { IDX: <null>, IDY: 7_#10, iX: <null> }
    20) { IDX: <null>, IDY: 7_#11, iX: <null> }
    21) { IDX: <null>, IDY: 10_#14, iX: <null> }
    22) { IDX: <null>, IDY: 10_#15, iX: <null> }
    23) { IDX: <null>, IDY: 14_#20, iX: <null> }
    24) { IDX: <null>, IDY: 14_#21, iX: <null> }
    25) { IDX: <null>, IDY: 15_#22, iX: <null> }
    26) { IDX: <null>, IDY: 15_#23, iX: <null> }
    27) { IDX: <null>, IDY: 16_#24, iX: <null> }
    28) { IDX: <null>, IDY: 16_#25, iX: <null> }
    29) { IDX: <null>, IDY: 19_#28, iX: <null> }
    30) { IDX: <null>, IDY: 19_#29, iX: <null> }
20) Sequence: Seq<{str,str,i8}>
     0) { IDX: <null>, IDY: _#0, iX: <null> }
     1) { IDX: <null>, IDY: _#1, iX: <null> }
     2) { IDX: <null>, IDY: _#2, iX: <null> }
     3) { IDX: 11_#0, IDY: <null>, iX: 0 }
     4) { IDX: 12_#1, IDY: <null>, iX: 1 }
     5) { IDX: 13_#2, IDY: <null>, iX: 2 }
21) Sequence: Seq<{str,str,i8}>
     0) { IDX: 11_#0, IDY: 11_#0, iX: 0 }
     1) { IDX: 12_#1, IDY: 12_#1, iX: 1 }
     2) { IDX: 13_#2, IDY: 13_#2, iX: 2 }
22) Sequence: Seq<{str,str,i8}>
     0) { IDX: 11_#0, IDY: <null>, iX: 0 }
     1) { IDX: 12_#1, IDY: <null>, iX: 1 }
     2) { IDX: 13_#2, IDY: <null>, iX: 2 }
23) <null>
24) Sequence: Seq<{str,str,i8}>
     0) { IDX: <null>, IDY: 0_#0, iX: <null> }
     1) { IDX: <null>, IDY: 1_#1, iX: <null> }
     2) { IDX: <null>, IDY: _#2, iX: <null> }
     3) { IDX: <null>, IDY: 4_#3, iX: <null> }
     4) { IDX: <null>, IDY: 6_#4, iX: <null> }
     5) { IDX: <null>, IDY: 7_#5, iX: <null> }
     6) { IDX: <null>, IDY: 9_#6, iX: <null> }
     7) { IDX: <null>, IDY: _#7, iX: <null> }
     8) { IDX: <null>, IDY: 12_#8, iX: <null> }
     9) { IDX: <null>, IDY: 13_#9, iX: <null> }
    10) { IDX: <null>, IDY: 15_#10, iX: <null> }
    11) { IDX: <null>, IDY: 16_#11, iX: <null> }
    12) { IDX: <null>, IDY: 18_#12, iX: <null> }
    13) { IDX: <null>, IDY: 19_#13, iX: <null> }
25) Sequence: Seq<{str,str,i8}>
     0) { IDX: <null>, IDY: 0_#0, iX: <null> }
     1) { IDX: <null>, IDY: 0_#1, iX: <null> }
     2) { IDX: <null>, IDY: 2_#2, iX: <null> }
     3) { IDX: <null>, IDY: 2_#3, iX: <null> }
     4) { IDX: <null>, IDY: _#4, iX: <null> }
     5) { IDX: <null>, IDY: _#5, iX: <null> }
     6) { IDX: <null>, IDY: 4_#6, iX: <null> }
     7) { IDX: <null>, IDY: 4_#7, iX: <null> }
     8) { IDX: <null>, IDY: 6_#8, iX: <null> }
     9) { IDX: <null>, IDY: 6_#9, iX: <null> }
    10) { IDX: <null>, IDY: 7_#10, iX: <null> }
    11) { IDX: <null>, IDY: 7_#11, iX: <null> }
    12) { IDX: <null>, IDY: _#12, iX: <null> }
    13) { IDX: <null>, IDY: _#13, iX: <null> }
    14) { IDX: <null>, IDY: 10_#14, iX: <null> }
    15) { IDX: <null>, IDY: 10_#15, iX: <null> }
    16) { IDX: <null>, IDY: 11_#16, iX: <null> }
    17) { IDX: <null>, IDY: 11_#17, iX: <null> }
    18) { IDX: <null>, IDY: 12_#18, iX: <null> }
    19) { IDX: <null>, IDY: 12_#19, iX: <null> }
    20) { IDX: <null>, IDY: 14_#20, iX: <null> }
    21) { IDX: <null>, IDY: 14_#21, iX: <null> }
    22) { IDX: <null>, IDY: 15_#22, iX: <null> }
    23) { IDX: <null>, IDY: 15_#23, iX: <null> }
    24) { IDX: <null>, IDY: 16_#24, iX: <null> }
    25) { IDX: <null>, IDY: 16_#25, iX: <null> }
    26) { IDX: <null>, IDY: _#26, iX: <null> }
    27) { IDX: <null>, IDY: _#27, iX: <null> }
    28) { IDX: <null>, IDY: 19_#28, iX: <null> }
    29) { IDX: <null>, IDY: 19_#29, iX: <null> }
26) Sequence: Seq<{str,str,i8}>
     0) { IDX: <null>, IDY: _#0, iX: <null> }
     1) { IDX: <null>, IDY: _#1, iX: <null> }
     2) { IDX: <null>, IDY: _#2, iX: <null> }
27) Sequence: Seq<{str,str,i8}>
     0) { IDX: <null>, IDY: 11_#0, iX: <null> }
     1) { IDX: <null>, IDY: 12_#1, iX: <null> }
     2) { IDX: <null>, IDY: 13_#2, iX: <null> }
28) Sequence: Seq<{str,str,i8}>
29) <null>
30) <null>
31) <null>
32) <null>
33) <null>
34) <null>
35) <null>
*** Ctx ping count: 157
    [0:3](108=0+0+108): KeyJoin(*4: *1x, *5: *2x, *4.V, *5.V, Ref<{IDX:s, IDY:s, iX:i8?}>({IDX:*4.ID, IDY:*5.ID, iX:#3}), {IDX:*4.ID, iX:Opt<i8?>(#3)[, IDY:str(<null>)]}, {IDY:*5.ID[, IDX:str(<null>), iX:null:i8?]})
    [3:5](49=7+42): CrossJoin(*1: XSi, *2: YSi, true, KeyJoin(*4: *1, *5: *2, *4.V, *5.V, Ref<{IDX:s, IDY:s, iX:i8?}>({IDX:*4.ID, IDY:*5.ID, iX:#3}), {IDX:*4.ID, iX:Opt<i8?>(#3)[, IDY:str(<null>)]}, {IDY:*5.ID[, IDX:str(<null>), iX:null:i8?]}))
###
> CrossJoin(X:XSi, Y:YSi, true,   KeyJoin(x:X, y:Y,           V,    V , {         IDX:x.ID, iY: #y, IDY:y.ID }, {        IDX:ID }, { iY: #, IDY:ID }))
CrossJoin(X : XSi, Y : YSi, true, KeyJoin(x : X, y : Y, V, V, { IDX : x.ID, iY : #y, IDY : y.ID }, { IDX : ID }, { iY : #, IDY : ID })) : {IDX:s, IDY:s, iY:i8?}**
BndKind:Call, Type:{IDX:s, IDY:s, iY:i8?}**, Bnd:(Call(∂.CrossJoin([map:1] Global(XSi), [map:2] Global(YSi), true:b, Call(∂.KeyJoin([map:3] Scope(1), [map:5] Scope(2), GetField(Scope(3), V), GetField(Scope(5), V), Ref<{IDX:s, IDY:s, iY:i8?}>({IDX:GetField(Scope(3), ID), IDY:GetField(Scope(5), ID), iY:Scope(4)}), {IDX:GetField(Scope(3), ID)[, IDY:str(<null>), iY:null:i8?]}, {IDY:GetField(Scope(5), ID), iY:Opt<i8?>(Scope(4))[, IDX:str(<null>)]})))))
// (<ctx>, ∂.XSi:{ID:s, V:i8?}**, ∂.YSi:{ID:s, V:i8?}**) : {IDX:s, IDY:s, iY:i8?}**
CrossJoin_2(Arr<obj>, Seq<{str,i8}>, Seq<{str,i8}>):bool
      1) ldc.i4.1
      1) ret
  Total Size: 2

KeyJoin_2(Arr<obj>, i8, {str,i8}):Opt<i8>
      1) ldarg.2 [{str,i8}]
      1) dup
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      5) ldfld {str,i8}::_F1:i8
      5) newobj Opt<i8>(i8)
      5) br [1]
  Label [0]:
      1) pop
      5) call static CodeGenUtil::GetDefault():Opt<i8>
  Label [1]:
      1) ret
  Total Size: 36

KeyJoin_3(Arr<obj>, i8, {str,i8}):Opt<i8>
      1) ldarg.2 [{str,i8}]
      1) dup
      5) ldfld {str,i8}::_B0:u1
      1) ldc.i4.2
      1) and
      5) brfalse [0]
      5) ldfld {str,i8}::_F1:i8
      5) newobj Opt<i8>(i8)
      5) br [1]
  Label [0]:
      1) pop
      5) call static CodeGenUtil::GetDefault():Opt<i8>
  Label [1]:
      1) ret
  Total Size: 36

KeyJoin_4(Arr<obj>, i8, {str,i8}, i8, {str,i8}):{str,str,i8}
      5) newobj {str,str,i8}()
      1) dup
      1) ldc.i4.7
      5) stfld {str,str,i8}::_B0:u1
      1) stloc.0 [{str,str,i8}]
      1) ldloc.0 [{str,str,i8}]
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8}::_F0:str
      1) ldloc.0 [{str,str,i8}]
      2) ldarg.s [{str,i8} (4)]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8}::_F1:str
      1) ldloc.0 [{str,str,i8}]
      1) ldarg.3 [i8]
      5) stfld {str,str,i8}::_F2:i8
      1) ldloc.0 [{str,str,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 60

KeyJoin_5(Arr<obj>, i8, {str,i8}):{str,str,i8}
      5) newobj {str,str,i8}()
      1) dup
      1) ldc.i4.3
      5) stfld {str,str,i8}::_B0:u1
      1) stloc.0 [{str,str,i8}]
      1) ldloc.0 [{str,str,i8}]
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8}::_F0:str
      1) ldloc.0 [{str,str,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 40

KeyJoin_6(Arr<obj>, i8, {str,i8}):{str,str,i8}
      5) newobj {str,str,i8}()
      1) dup
      1) ldc.i4.3
      5) stfld {str,str,i8}::_B0:u1
      1) stloc.0 [{str,str,i8}]
      1) ldloc.0 [{str,str,i8}]
      1) ldarg.2 [{str,i8}]
      5) ldfld {str,i8}::_F0:str
      5) stfld {str,str,i8}::_F1:str
      1) ldloc.0 [{str,str,i8}]
      1) ldarg.1 [i8]
      5) stfld {str,str,i8}::_F2:i8
      1) ldloc.0 [{str,str,i8}]
      1) dup
      5) ldfld {str,str,i8}::_B0:u1
      1) ldc.i4.4
      1) or
      5) stfld {str,str,i8}::_B0:u1
      1) ldloc.0 [{str,str,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 61

CrossJoin_3(Arr<obj>, Seq<{str,i8}>, Seq<{str,i8}>):Seq<{str,str,i8}>
      1) ldarg.1 [Seq<{str,i8}>]
      1) ldarg.2 [Seq<{str,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<i8,{str,i8},Opt<i8>>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [Func<i8,{str,i8},Opt<i8>>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Func<i8,{str,i8},i8,{str,i8},{str,str,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.3
      5) ldelem [Func<i8,{str,i8},{str,str,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.4
      5) ldelem [Func<i8,{str,i8},{str,str,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Arr<obj>]
      1) ldc.i4.5
      5) ldelem [EqualityComparer<Opt<i8>>]
      1) ldc.i4.1
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [ExecCtx]
      1) ldc.i4.0
      5) call static KeyJoinGen::ExecInd(Seq<{str,i8}>, Seq<{str,i8}>, Func<i8,{str,i8},Opt<i8>>, Func<i8,{str,i8},Opt<i8>>, Func<i8,{str,i8},i8,{str,i8},{str,str,i8}>, Func<i8,{str,i8},{str,str,i8}>, Func<i8,{str,i8},{str,str,i8}>, EqualityComparer<Opt<i8>>, bool, ExecCtx, i4):Seq<{str,str,i8}>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<{str,str,i8}>):Seq<{str,str,i8}>
      1) ret
  Total Size: 100

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):ExecCtx
      1) stloc.0 [ExecCtx]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<Seq<{str,i8}>>
      1) stloc.1 [Seq<Seq<{str,i8}>>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.2
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<Seq<{str,i8}>>
      1) stloc.2 [Seq<Seq<{str,i8}>>]
      1) ldloc.1 [Seq<Seq<{str,i8}>>]
      1) ldloc.2 [Seq<Seq<{str,i8}>>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<Seq<{str,i8}>,Seq<{str,i8}>,bool>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [MethodInfo]
      5) ldtoken [Func<Seq<{str,i8}>,Seq<{str,i8}>,Seq<{str,str,i8}>>]
      5) call static Type::GetTypeFromHandle(RuntimeTypeHandle):Type
      1) ldc.i4.2
      5) newarr [obj]
      1) dup
      1) ldc.i4.0
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Arr<obj>]
      5) stelem [Arr<obj>]
      1) dup
      1) ldc.i4.1
      1) ldloc.0 [ExecCtx]
      5) stelem [ExecCtx]
      5) callvirt DynamicMethod::CreateDelegate(Type, obj):Delegate
      1) ldloc.0 [ExecCtx]
      1) ldc.i4.3
      5) call static CrossJoinGen::Exec(Seq<Seq<{str,i8}>>, Seq<Seq<{str,i8}>>, Func<Seq<{str,i8}>,Seq<{str,i8}>,bool>, Func<Seq<{str,i8}>,Seq<{str,i8}>,Seq<{str,str,i8}>>, ExecCtx, i4):Seq<Seq<{str,str,i8}>>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<Seq<{str,str,i8}>>):Seq<Seq<{str,str,i8}>>
      1) ret
  Total Size: 99

Func sig: (<ctx>:x, XSi:{ID:s, V:i8?}**, YSi:{ID:s, V:i8?}**) to {IDX:s, IDY:s, iY:i8?}**
Sequence: Seq<Seq<{str,str,i8}>>
 0) Sequence: Seq<{str,str,i8}>
     0) { IDX: 0_#0, IDY: 0_#0, iY: 0 }
     1) { IDX: <null>, IDY: _#2, iY: 2 }
     2) { IDX: <null>, IDY: _#7, iY: 7 }
     3) { IDX: 1_#1, IDY: 1_#1, iY: 1 }
     4) { IDX: _#2, IDY: <null>, iY: <null> }
     5) { IDX: 4_#3, IDY: 4_#3, iY: 3 }
     6) { IDX: 6_#4, IDY: 6_#4, iY: 4 }
     7) { IDX: 7_#5, IDY: 7_#5, iY: 5 }
     8) { IDX: 9_#6, IDY: 9_#6, iY: 6 }
     9) { IDX: _#7, IDY: <null>, iY: <null> }
    10) { IDX: 12_#8, IDY: 12_#8, iY: 8 }
    11) { IDX: 13_#9, IDY: 13_#9, iY: 9 }
    12) { IDX: 15_#10, IDY: 15_#10, iY: 10 }
    13) { IDX: 16_#11, IDY: 16_#11, iY: 11 }
    14) { IDX: 18_#12, IDY: 18_#12, iY: 12 }
    15) { IDX: 19_#13, IDY: 19_#13, iY: 13 }
 1) Sequence: Seq<{str,str,i8}>
     0) { IDX: 0_#0, IDY: 0_#0, iY: 0 }
     1) { IDX: 0_#0, IDY: 0_#1, iY: 1 }
     2) { IDX: <null>, IDY: _#4, iY: 4 }
     3) { IDX: <null>, IDY: _#5, iY: 5 }
     4) { IDX: <null>, IDY: _#12, iY: 12 }
     5) { IDX: <null>, IDY: _#13, iY: 13 }
     6) { IDX: <null>, IDY: _#26, iY: 26 }
     7) { IDX: <null>, IDY: _#27, iY: 27 }
     8) { IDX: 1_#1, IDY: <null>, iY: <null> }
     9) { IDX: _#2, IDY: <null>, iY: <null> }
    10) { IDX: 4_#3, IDY: 4_#6, iY: 6 }
    11) { IDX: 4_#3, IDY: 4_#7, iY: 7 }
    12) { IDX: 6_#4, IDY: 6_#8, iY: 8 }
    13) { IDX: 6_#4, IDY: 6_#9, iY: 9 }
    14) { IDX: 7_#5, IDY: 7_#10, iY: 10 }
    15) { IDX: 7_#5, IDY: 7_#11, iY: 11 }
    16) { IDX: 9_#6, IDY: <null>, iY: <null> }
    17) { IDX: _#7, IDY: <null>, iY: <null> }
    18) { IDX: 12_#8, IDY: 12_#18, iY: 18 }
    19) { IDX: 12_#8, IDY: 12_#19, iY: 19 }
    20) { IDX: 13_#9, IDY: <null>, iY: <null> }
    21) { IDX: 15_#10, IDY: 15_#22, iY: 22 }
    22) { IDX: 15_#10, IDY: 15_#23, iY: 23 }
    23) { IDX: 16_#11, IDY: 16_#24, iY: 24 }
    24) { IDX: 16_#11, IDY: 16_#25, iY: 25 }
    25) { IDX: 18_#12, IDY: <null>, iY: <null> }
    26) { IDX: 19_#13, IDY: 19_#28, iY: 28 }
    27) { IDX: 19_#13, IDY: 19_#29, iY: 29 }
    28) { IDX: <null>, IDY: 2_#2, iY: 2 }
    29) { IDX: <null>, IDY: 2_#3, iY: 3 }
    30) { IDX: <null>, IDY: 10_#14, iY: 14 }
    31) { IDX: <null>, IDY: 10_#15, iY: 15 }
    32) { IDX: <null>, IDY: 11_#16, iY: 16 }
    33) { IDX: <null>, IDY: 11_#17, iY: 17 }
    34) { IDX: <null>, IDY: 14_#20, iY: 20 }
    35) { IDX: <null>, IDY: 14_#21, iY: 21 }
 2) Sequence: Seq<{str,str,i8}>
     0) { IDX: <null>, IDY: _#0, iY: 0 }
     1) { IDX: <null>, IDY: _#1, iY: 1 }
     2) { IDX: <null>, IDY: _#2, iY: 2 }
     3) { IDX: 0_#0, IDY: <null>, iY: <null> }
     4) { IDX: 1_#1, IDY: <null>, iY: <null> }
     5) { IDX: _#2, IDY: <null>, iY: <null> }
     6) { IDX: 4_#3, IDY: <null>, iY: <null> }
     7) { IDX: 6_#4, IDY: <null>, iY: <null> }
     8) { IDX: 7_#5, IDY: <null>, iY: <null> }
     9) { IDX: 9_#6, IDY: <null>, iY: <null> }
    10) { IDX: _#7, IDY: <null>, iY: <null> }
    11) { IDX: 12_#8, IDY: <null>, iY: <null> }
    12) { IDX: 13_#9, IDY: <null>, iY: <null> }
    13) { IDX: 15_#10, IDY: <null>, iY: <null> }
    14) { IDX: 16_#11, IDY: <null>, iY: <null> }
    15) { IDX: 18_#12, IDY: <null>, iY: <null> }
    16) { IDX: 19_#13, IDY: <null>, iY: <null> }
 3) Sequence: Seq<{str,str,i8}>
     0) { IDX: 0_#0, IDY: <null>, iY: <null> }
     1) { IDX: 1_#1, IDY: <null>, iY: <null> }
     2) { IDX: _#2, IDY: <null>, iY: <null> }
     3) { IDX: 4_#3, IDY: <null>, iY: <null> }
     4) { IDX: 6_#4, IDY: <null>, iY: <null> }
     5) { IDX: 7_#5, IDY: <null>, iY: <null> }
     6) { IDX: 9_#6, IDY: <null>, iY: <null> }
     7) { IDX: _#7, IDY: <null>, iY: <null> }
     8) { IDX: 12_#8, IDY: 12_#1, iY: 1 }
     9) { IDX: 13_#9, IDY: 13_#2, iY: 2 }
    10) { IDX: 15_#10, IDY: <null>, iY: <null> }
    11) { IDX: 16_#11, IDY: <null>, iY: <null> }
    12) { IDX: 18_#12, IDY: <null>, iY: <null> }
    13) { IDX: 19_#13, IDY: <null>, iY: <null> }
    14) { IDX: <null>, IDY: 11_#0, iY: 0 }
 4) Sequence: Seq<{str,str,i8}>
     0) { IDX: 0_#0, IDY: <null>, iY: <null> }
     1) { IDX: 1_#1, IDY: <null>, iY: <null> }
     2) { IDX: _#2, IDY: <null>, iY: <null> }
     3) { IDX: 4_#3, IDY: <null>, iY: <null> }
     4) { IDX: 6_#4, IDY: <null>, iY: <null> }
     5) { IDX: 7_#5, IDY: <null>, iY: <null> }
     6) { IDX: 9_#6, IDY: <null>, iY: <null> }
     7) { IDX: _#7, IDY: <null>, iY: <null> }
     8) { IDX: 12_#8, IDY: <null>, iY: <null> }
     9) { IDX: 13_#9, IDY: <null>, iY: <null> }
    10) { IDX: 15_#10, IDY: <null>, iY: <null> }
    11) { IDX: 16_#11, IDY: <null>, iY: <null> }
    12) { IDX: 18_#12, IDY: <null>, iY: <null> }
    13) { IDX: 19_#13, IDY: <null>, iY: <null> }
 5) <null>
 6) Sequence: Seq<{str,str,i8}>
     0) { IDX: 0_#0, IDY: 0_#0, iY: 0 }
     1) { IDX: <null>, IDY: _#2, iY: 2 }
     2) { IDX: <null>, IDY: _#7, iY: 7 }
     3) { IDX: 0_#1, IDY: 0_#0, iY: 0 }
     4) { IDX: 2_#2, IDY: <null>, iY: <null> }
     5) { IDX: 2_#3, IDY: <null>, iY: <null> }
     6) { IDX: _#4, IDY: <null>, iY: <null> }
     7) { IDX: _#5, IDY: <null>, iY: <null> }
     8) { IDX: 4_#6, IDY: 4_#3, iY: 3 }
     9) { IDX: 4_#7, IDY: 4_#3, iY: 3 }
    10) { IDX: 6_#8, IDY: 6_#4, iY: 4 }
    11) { IDX: 6_#9, IDY: 6_#4, iY: 4 }
    12) { IDX: 7_#10, IDY: 7_#5, iY: 5 }
    13) { IDX: 7_#11, IDY: 7_#5, iY: 5 }
    14) { IDX: _#12, IDY: <null>, iY: <null> }
    15) { IDX: _#13, IDY: <null>, iY: <null> }
    16) { IDX: 10_#14, IDY: <null>, iY: <null> }
    17) { IDX: 10_#15, IDY: <null>, iY: <null> }
    18) { IDX: 11_#16, IDY: <null>, iY: <null> }
    19) { IDX: 11_#17, IDY: <null>, iY: <null> }
    20) { IDX: 12_#18, IDY: 12_#8, iY: 8 }
    21) { IDX: 12_#19, IDY: 12_#8, iY: 8 }
    22) { IDX: 14_#20, IDY: <null>, iY: <null> }
    23) { IDX: 14_#21, IDY: <null>, iY: <null> }
    24) { IDX: 15_#22, IDY: 15_#10, iY: 10 }
    25) { IDX: 15_#23, IDY: 15_#10, iY: 10 }
    26) { IDX: 16_#24, IDY: 16_#11, iY: 11 }
    27) { IDX: 16_#25, IDY: 16_#11, iY: 11 }
    28) { IDX: _#26, IDY: <null>, iY: <null> }
    29) { IDX: _#27, IDY: <null>, iY: <null> }
    30) { IDX: 19_#28, IDY: 19_#13, iY: 13 }
    31) { IDX: 19_#29, IDY: 19_#13, iY: 13 }
    32) { IDX: <null>, IDY: 1_#1, iY: 1 }
    33) { IDX: <null>, IDY: 9_#6, iY: 6 }
    34) { IDX: <null>, IDY: 13_#9, iY: 9 }
    35) { IDX: <null>, IDY: 18_#12, iY: 12 }
 7) Sequence: Seq<{str,str,i8}>
     0) { IDX: 0_#0, IDY: 0_#0, iY: 0 }
     1) { IDX: 0_#0, IDY: 0_#1, iY: 1 }
     2) { IDX: <null>, IDY: _#4, iY: 4 }
     3) { IDX: <null>, IDY: _#5, iY: 5 }
     4) { IDX: <null>, IDY: _#12, iY: 12 }
     5) { IDX: <null>, IDY: _#13, iY: 13 }
     6) { IDX: <null>, IDY: _#26, iY: 26 }
     7) { IDX: <null>, IDY: _#27, iY: 27 }
     8) { IDX: 0_#1, IDY: 0_#0, iY: 0 }
     9) { IDX: 0_#1, IDY: 0_#1, iY: 1 }
    10) { IDX: 2_#2, IDY: 2_#2, iY: 2 }
    11) { IDX: 2_#2, IDY: 2_#3, iY: 3 }
    12) { IDX: 2_#3, IDY: 2_#2, iY: 2 }
    13) { IDX: 2_#3, IDY: 2_#3, iY: 3 }
    14) { IDX: _#4, IDY: <null>, iY: <null> }
    15) { IDX: _#5, IDY: <null>, iY: <null> }
    16) { IDX: 4_#6, IDY: 4_#6, iY: 6 }
    17) { IDX: 4_#6, IDY: 4_#7, iY: 7 }
    18) { IDX: 4_#7, IDY: 4_#6, iY: 6 }
    19) { IDX: 4_#7, IDY: 4_#7, iY: 7 }
    20) { IDX: 6_#8, IDY: 6_#8, iY: 8 }
    21) { IDX: 6_#8, IDY: 6_#9, iY: 9 }
    22) { IDX: 6_#9, IDY: 6_#8, iY: 8 }
    23) { IDX: 6_#9, IDY: 6_#9, iY: 9 }
    24) { IDX: 7_#10, IDY: 7_#10, iY: 10 }
    25) { IDX: 7_#10, IDY: 7_#11, iY: 11 }
    26) { IDX: 7_#11, IDY: 7_#10, iY: 10 }
    27) { IDX: 7_#11, IDY: 7_#11, iY: 11 }
    28) { IDX: _#12, IDY: <null>, iY: <null> }
    29) { IDX: _#13, IDY: <null>, iY: <null> }
    30) { IDX: 10_#14, IDY: 10_#14, iY: 14 }
    31) { IDX: 10_#14, IDY: 10_#15, iY: 15 }
    32) { IDX: 10_#15, IDY: 10_#14, iY: 14 }
    33) { IDX: 10_#15, IDY: 10_#15, iY: 15 }
    34) { IDX: 11_#16, IDY: 11_#16, iY: 16 }
    35) { IDX: 11_#16, IDY: 11_#17, iY: 17 }
    36) { IDX: 11_#17, IDY: 11_#16, iY: 16 }
    37) { IDX: 11_#17, IDY: 11_#17, iY: 17 }
    38) { IDX: 12_#18, IDY: 12_#18, iY: 18 }
    39) { IDX: 12_#18, IDY: 12_#19, iY: 19 }
    40) { IDX: 12_#19, IDY: 12_#18, iY: 18 }
    41) { IDX: 12_#19, IDY: 12_#19, iY: 19 }
    42) { IDX: 14_#20, IDY: 14_#20, iY: 20 }
    43) { IDX: 14_#20, IDY: 14_#21, iY: 21 }
    44) { IDX: 14_#21, IDY: 14_#20, iY: 20 }
    45) { IDX: 14_#21, IDY: 14_#21, iY: 21 }
    46) { IDX: 15_#22, IDY: 15_#22, iY: 22 }
    47) { IDX: 15_#22, IDY: 15_#23, iY: 23 }
    48) { IDX: 15_#23, IDY: 15_#22, iY: 22 }
    49) { IDX: 15_#23, IDY: 15_#23, iY: 23 }
    50) { IDX: 16_#24, IDY: 16_#24, iY: 24 }
    51) { IDX: 16_#24, IDY: 16_#25, iY: 25 }
    52) { IDX: 16_#25, IDY: 16_#24, iY: 24 }
    53) { IDX: 16_#25, IDY: 16_#25, iY: 25 }
    54) { IDX: _#26, IDY: <null>, iY: <null> }
    55) { IDX: _#27, IDY: <null>, iY: <null> }
    56) { IDX: 19_#28, IDY: 19_#28, iY: 28 }
    57) { IDX: 19_#28, IDY: 19_#29, iY: 29 }
    58) { IDX: 19_#29, IDY: 19_#28, iY: 28 }
    59) { IDX: 19_#29, IDY: 19_#29, iY: 29 }
 8) Sequence: Seq<{str,str,i8}>
     0) { IDX: <null>, IDY: _#0, iY: 0 }
     1) { IDX: <null>, IDY: _#1, iY: 1 }
     2) { IDX: <null>, IDY: _#2, iY: 2 }
     3) { IDX: 0_#0, IDY: <null>, iY: <null> }
     4) { IDX: 0_#1, IDY: <null>, iY: <null> }
     5) { IDX: 2_#2, IDY: <null>, iY: <null> }
     6) { IDX: 2_#3, IDY: <null>, iY: <null> }
     7) { IDX: _#4, IDY: <null>, iY: <null> }
     8) { IDX: _#5, IDY: <null>, iY: <null> }
     9) { IDX: 4_#6, IDY: <null>, iY: <null> }
    10) { IDX: 4_#7, IDY: <null>, iY: <null> }
    11) { IDX: 6_#8, IDY: <null>, iY: <null> }
    12) { IDX: 6_#9, IDY: <null>, iY: <null> }
    13) { IDX: 7_#10, IDY: <null>, iY: <null> }
    14) { IDX: 7_#11, IDY: <null>, iY: <null> }
    15) { IDX: _#12, IDY: <null>, iY: <null> }
    16) { IDX: _#13, IDY: <null>, iY: <null> }
    17) { IDX: 10_#14, IDY: <null>, iY: <null> }
    18) { IDX: 10_#15, IDY: <null>, iY: <null> }
    19) { IDX: 11_#16, IDY: <null>, iY: <null> }
    20) { IDX: 11_#17, IDY: <null>, iY: <null> }
    21) { IDX: 12_#18, IDY: <null>, iY: <null> }
    22) { IDX: 12_#19, IDY: <null>, iY: <null> }
    23) { IDX: 14_#20, IDY: <null>, iY: <null> }
    24) { IDX: 14_#21, IDY: <null>, iY: <null> }
    25) { IDX: 15_#22, IDY: <null>, iY: <null> }
    26) { IDX: 15_#23, IDY: <null>, iY: <null> }
    27) { IDX: 16_#24, IDY: <null>, iY: <null> }
    28) { IDX: 16_#25, IDY: <null>, iY: <null> }
    29) { IDX: _#26, IDY: <null>, iY: <null> }
    30) { IDX: _#27, IDY: <null>, iY: <null> }
    31) { IDX: 19_#28, IDY: <null>, iY: <null> }
    32) { IDX: 19_#29, IDY: <null>, iY: <null> }
 9) Sequence: Seq<{str,str,i8}>
     0) { IDX: 0_#0, IDY: <null>, iY: <null> }
     1) { IDX: 0_#1, IDY: <null>, iY: <null> }
     2) { IDX: 2_#2, IDY: <null>, iY: <null> }
     3) { IDX: 2_#3, IDY: <null>, iY: <null> }
     4) { IDX: _#4, IDY: <null>, iY: <null> }
     5) { IDX: _#5, IDY: <null>, iY: <null> }
     6) { IDX: 4_#6, IDY: <null>, iY: <null> }
     7) { IDX: 4_#7, IDY: <null>, iY: <null> }
     8) { IDX: 6_#8, IDY: <null>, iY: <null> }
     9) { IDX: 6_#9, IDY: <null>, iY: <null> }
    10) { IDX: 7_#10, IDY: <null>, iY: <null> }
    11) { IDX: 7_#11, IDY: <null>, iY: <null> }
    12) { IDX: _#12, IDY: <null>, iY: <null> }
    13) { IDX: _#13, IDY: <null>, iY: <null> }
    14) { IDX: 10_#14, IDY: <null>, iY: <null> }
    15) { IDX: 10_#15, IDY: <null>, iY: <null> }
    16) { IDX: 11_#16, IDY: 11_#0, iY: 0 }
    17) { IDX: 11_#17, IDY: 11_#0, iY: 0 }
    18) { IDX: 12_#18, IDY: 12_#1, iY: 1 }
    19) { IDX: 12_#19, IDY: 12_#1, iY: 1 }
    20) { IDX: 14_#20, IDY: <null>, iY: <null> }
    21) { IDX: 14_#21, IDY: <null>, iY: <null> }
    22) { IDX: 15_#22, IDY: <null>, iY: <null> }
    23) { IDX: 15_#23, IDY: <null>, iY: <null> }
    24) { IDX: 16_#24, IDY: <null>, iY: <null> }
    25) { IDX: 16_#25, IDY: <null>, iY: <null> }
    26) { IDX: _#26, IDY: <null>, iY: <null> }
    27) { IDX: _#27, IDY: <null>, iY: <null> }
    28) { IDX: 19_#28, IDY: <null>, iY: <null> }
    29) { IDX: 19_#29, IDY: <null>, iY: <null> }
    30) { IDX: <null>, IDY: 13_#2, iY: 2 }
10) Sequence: Seq<{str,str,i8}>
     0) { IDX: 0_#0, IDY: <null>, iY: <null> }
     1) { IDX: 0_#1, IDY: <null>, iY: <null> }
     2) { IDX: 2_#2, IDY: <null>, iY: <null> }
     3) { IDX: 2_#3, IDY: <null>, iY: <null> }
     4) { IDX: _#4, IDY: <null>, iY: <null> }
     5) { IDX: _#5, IDY: <null>, iY: <null> }
     6) { IDX: 4_#6, IDY: <null>, iY: <null> }
     7) { IDX: 4_#7, IDY: <null>, iY: <null> }
     8) { IDX: 6_#8, IDY: <null>, iY: <null> }
     9) { IDX: 6_#9, IDY: <null>, iY: <null> }
    10) { IDX: 7_#10, IDY: <null>, iY: <null> }
    11) { IDX: 7_#11, IDY: <null>, iY: <null> }
    12) { IDX: _#12, IDY: <null>, iY: <null> }
    13) { IDX: _#13, IDY: <null>, iY: <null> }
    14) { IDX: 10_#14, IDY: <null>, iY: <null> }
    15) { IDX: 10_#15, IDY: <null>, iY: <null> }
    16) { IDX: 11_#16, IDY: <null>, iY: <null> }
    17) { IDX: 11_#17, IDY: <null>, iY: <null> }
    18) { IDX: 12_#18, IDY: <null>, iY: <null> }
    19) { IDX: 12_#19, IDY: <null>, iY: <null> }
    20) { IDX: 14_#20, IDY: <null>, iY: <null> }
    21) { IDX: 14_#21, IDY: <null>, iY: <null> }
    22) { IDX: 15_#22, IDY: <null>, iY: <null> }
    23) { IDX: 15_#23, IDY: <null>, iY: <null> }
    24) { IDX: 16_#24, IDY: <null>, iY: <null> }
    25) { IDX: 16_#25, IDY: <null>, iY: <null> }
    26) { IDX: _#26, IDY: <null>, iY: <null> }
    27) { IDX: _#27, IDY: <null>, iY: <null> }
    28) { IDX: 19_#28, IDY: <null>, iY: <null> }
    29) { IDX: 19_#29, IDY: <null>, iY: <null> }
11) <null>
12) Sequence: Seq<{str,str,i8}>
     0) { IDX: _#0, IDY: <null>, iY: <null> }
     1) { IDX: _#1, IDY: <null>, iY: <null> }
     2) { IDX: _#2, IDY: <null>, iY: <null> }
     3) { IDX: <null>, IDY: 0_#0, iY: 0 }
     4) { IDX: <null>, IDY: 1_#1, iY: 1 }
     5) { IDX: <null>, IDY: _#2, iY: 2 }
     6) { IDX: <null>, IDY: 4_#3, iY: 3 }
     7) { IDX: <null>, IDY: 6_#4, iY: 4 }
     8) { IDX: <null>, IDY: 7_#5, iY: 5 }
     9) { IDX: <null>, IDY: 9_#6, iY: 6 }
    10) { IDX: <null>, IDY: _#7, iY: 7 }
    11) { IDX: <null>, IDY: 12_#8, iY: 8 }
    12) { IDX: <null>, IDY: 13_#9, iY: 9 }
    13) { IDX: <null>, IDY: 15_#10, iY: 10 }
    14) { IDX: <null>, IDY: 16_#11, iY: 11 }
    15) { IDX: <null>, IDY: 18_#12, iY: 12 }
    16) { IDX: <null>, IDY: 19_#13, iY: 13 }
13) Sequence: Seq<{str,str,i8}>
     0) { IDX: _#0, IDY: <null>, iY: <null> }
     1) { IDX: _#1, IDY: <null>, iY: <null> }
     2) { IDX: _#2, IDY: <null>, iY: <null> }
     3) { IDX: <null>, IDY: 0_#0, iY: 0 }
     4) { IDX: <null>, IDY: 0_#1, iY: 1 }
     5) { IDX: <null>, IDY: 2_#2, iY: 2 }
     6) { IDX: <null>, IDY: 2_#3, iY: 3 }
     7) { IDX: <null>, IDY: _#4, iY: 4 }
     8) { IDX: <null>, IDY: _#5, iY: 5 }
     9) { IDX: <null>, IDY: 4_#6, iY: 6 }
    10) { IDX: <null>, IDY: 4_#7, iY: 7 }
    11) { IDX: <null>, IDY: 6_#8, iY: 8 }
    12) { IDX: <null>, IDY: 6_#9, iY: 9 }
    13) { IDX: <null>, IDY: 7_#10, iY: 10 }
    14) { IDX: <null>, IDY: 7_#11, iY: 11 }
    15) { IDX: <null>, IDY: _#12, iY: 12 }
    16) { IDX: <null>, IDY: _#13, iY: 13 }
    17) { IDX: <null>, IDY: 10_#14, iY: 14 }
    18) { IDX: <null>, IDY: 10_#15, iY: 15 }
    19) { IDX: <null>, IDY: 11_#16, iY: 16 }
    20) { IDX: <null>, IDY: 11_#17, iY: 17 }
    21) { IDX: <null>, IDY: 12_#18, iY: 18 }
    22) { IDX: <null>, IDY: 12_#19, iY: 19 }
    23) { IDX: <null>, IDY: 14_#20, iY: 20 }
    24) { IDX: <null>, IDY: 14_#21, iY: 21 }
    25) { IDX: <null>, IDY: 15_#22, iY: 22 }
    26) { IDX: <null>, IDY: 15_#23, iY: 23 }
    27) { IDX: <null>, IDY: 16_#24, iY: 24 }
    28) { IDX: <null>, IDY: 16_#25, iY: 25 }
    29) { IDX: <null>, IDY: _#26, iY: 26 }
    30) { IDX: <null>, IDY: _#27, iY: 27 }
    31) { IDX: <null>, IDY: 19_#28, iY: 28 }
    32) { IDX: <null>, IDY: 19_#29, iY: 29 }
14) Sequence: Seq<{str,str,i8}>
     0) { IDX: _#0, IDY: <null>, iY: <null> }
     1) { IDX: _#1, IDY: <null>, iY: <null> }
     2) { IDX: _#2, IDY: <null>, iY: <null> }
     3) { IDX: <null>, IDY: _#0, iY: 0 }
     4) { IDX: <null>, IDY: _#1, iY: 1 }
     5) { IDX: <null>, IDY: _#2, iY: 2 }
15) Sequence: Seq<{str,str,i8}>
     0) { IDX: _#0, IDY: <null>, iY: <null> }
     1) { IDX: _#1, IDY: <null>, iY: <null> }
     2) { IDX: _#2, IDY: <null>, iY: <null> }
     3) { IDX: <null>, IDY: 11_#0, iY: 0 }
     4) { IDX: <null>, IDY: 12_#1, iY: 1 }
     5) { IDX: <null>, IDY: 13_#2, iY: 2 }
16) Sequence: Seq<{str,str,i8}>
     0) { IDX: _#0, IDY: <null>, iY: <null> }
     1) { IDX: _#1, IDY: <null>, iY: <null> }
     2) { IDX: _#2, IDY: <null>, iY: <null> }
17) <null>
18) Sequence: Seq<{str,str,i8}>
     0) { IDX: <null>, IDY: _#2, iY: 2 }
     1) { IDX: <null>, IDY: _#7, iY: 7 }
     2) { IDX: 11_#0, IDY: <null>, iY: <null> }
     3) { IDX: 12_#1, IDY: 12_#8, iY: 8 }
     4) { IDX: 13_#2, IDY: 13_#9, iY: 9 }
     5) { IDX: <null>, IDY: 0_#0, iY: 0 }
     6) { IDX: <null>, IDY: 1_#1, iY: 1 }
     7) { IDX: <null>, IDY: 4_#3, iY: 3 }
     8) { IDX: <null>, IDY: 6_#4, iY: 4 }
     9) { IDX: <null>, IDY: 7_#5, iY: 5 }
    10) { IDX: <null>, IDY: 9_#6, iY: 6 }
    11) { IDX: <null>, IDY: 15_#10, iY: 10 }
    12) { IDX: <null>, IDY: 16_#11, iY: 11 }
    13) { IDX: <null>, IDY: 18_#12, iY: 12 }
    14) { IDX: <null>, IDY: 19_#13, iY: 13 }
19) Sequence: Seq<{str,str,i8}>
     0) { IDX: <null>, IDY: _#4, iY: 4 }
     1) { IDX: <null>, IDY: _#5, iY: 5 }
     2) { IDX: <null>, IDY: _#12, iY: 12 }
     3) { IDX: <null>, IDY: _#13, iY: 13 }
     4) { IDX: 11_#0, IDY: 11_#16, iY: 16 }
     5) { IDX: 11_#0, IDY: 11_#17, iY: 17 }
     6) { IDX: <null>, IDY: _#26, iY: 26 }
     7) { IDX: <null>, IDY: _#27, iY: 27 }
     8) { IDX: 12_#1, IDY: 12_#18, iY: 18 }
     9) { IDX: 12_#1, IDY: 12_#19, iY: 19 }
    10) { IDX: 13_#2, IDY: <null>, iY: <null> }
    11) { IDX: <null>, IDY: 0_#0, iY: 0 }
    12) { IDX: <null>, IDY: 0_#1, iY: 1 }
    13) { IDX: <null>, IDY: 2_#2, iY: 2 }
    14) { IDX: <null>, IDY: 2_#3, iY: 3 }
    15) { IDX: <null>, IDY: 4_#6, iY: 6 }
    16) { IDX: <null>, IDY: 4_#7, iY: 7 }
    17) { IDX: <null>, IDY: 6_#8, iY: 8 }
    18) { IDX: <null>, IDY: 6_#9, iY: 9 }
    19) { IDX: <null>, IDY: 7_#10, iY: 10 }
    20) { IDX: <null>, IDY: 7_#11, iY: 11 }
    21) { IDX: <null>, IDY: 10_#14, iY: 14 }
    22) { IDX: <null>, IDY: 10_#15, iY: 15 }
    23) { IDX: <null>, IDY: 14_#20, iY: 20 }
    24) { IDX: <null>, IDY: 14_#21, iY: 21 }
    25) { IDX: <null>, IDY: 15_#22, iY: 22 }
    26) { IDX: <null>, IDY: 15_#23, iY: 23 }
    27) { IDX: <null>, IDY: 16_#24, iY: 24 }
    28) { IDX: <null>, IDY: 16_#25, iY: 25 }
    29) { IDX: <null>, IDY: 19_#28, iY: 28 }
    30) { IDX: <null>, IDY: 19_#29, iY: 29 }
20) Sequence: Seq<{str,str,i8}>
     0) { IDX: <null>, IDY: _#0, iY: 0 }
     1) { IDX: <null>, IDY: _#1, iY: 1 }
     2) { IDX: <null>, IDY: _#2, iY: 2 }
     3) { IDX: 11_#0, IDY: <null>, iY: <null> }
     4) { IDX: 12_#1, IDY: <null>, iY: <null> }
     5) { IDX: 13_#2, IDY: <null>, iY: <null> }
21) Sequence: Seq<{str,str,i8}>
     0) { IDX: 11_#0, IDY: 11_#0, iY: 0 }
     1) { IDX: 12_#1, IDY: 12_#1, iY: 1 }
     2) { IDX: 13_#2, IDY: 13_#2, iY: 2 }
22) Sequence: Seq<{str,str,i8}>
     0) { IDX: 11_#0, IDY: <null>, iY: <null> }
     1) { IDX: 12_#1, IDY: <null>, iY: <null> }
     2) { IDX: 13_#2, IDY: <null>, iY: <null> }
23) <null>
24) Sequence: Seq<{str,str,i8}>
     0) { IDX: <null>, IDY: 0_#0, iY: 0 }
     1) { IDX: <null>, IDY: 1_#1, iY: 1 }
     2) { IDX: <null>, IDY: _#2, iY: 2 }
     3) { IDX: <null>, IDY: 4_#3, iY: 3 }
     4) { IDX: <null>, IDY: 6_#4, iY: 4 }
     5) { IDX: <null>, IDY: 7_#5, iY: 5 }
     6) { IDX: <null>, IDY: 9_#6, iY: 6 }
     7) { IDX: <null>, IDY: _#7, iY: 7 }
     8) { IDX: <null>, IDY: 12_#8, iY: 8 }
     9) { IDX: <null>, IDY: 13_#9, iY: 9 }
    10) { IDX: <null>, IDY: 15_#10, iY: 10 }
    11) { IDX: <null>, IDY: 16_#11, iY: 11 }
    12) { IDX: <null>, IDY: 18_#12, iY: 12 }
    13) { IDX: <null>, IDY: 19_#13, iY: 13 }
25) Sequence: Seq<{str,str,i8}>
     0) { IDX: <null>, IDY: 0_#0, iY: 0 }
     1) { IDX: <null>, IDY: 0_#1, iY: 1 }
     2) { IDX: <null>, IDY: 2_#2, iY: 2 }
     3) { IDX: <null>, IDY: 2_#3, iY: 3 }
     4) { IDX: <null>, IDY: _#4, iY: 4 }
     5) { IDX: <null>, IDY: _#5, iY: 5 }
     6) { IDX: <null>, IDY: 4_#6, iY: 6 }
     7) { IDX: <null>, IDY: 4_#7, iY: 7 }
     8) { IDX: <null>, IDY: 6_#8, iY: 8 }
     9) { IDX: <null>, IDY: 6_#9, iY: 9 }
    10) { IDX: <null>, IDY: 7_#10, iY: 10 }
    11) { IDX: <null>, IDY: 7_#11, iY: 11 }
    12) { IDX: <null>, IDY: _#12, iY: 12 }
    13) { IDX: <null>, IDY: _#13, iY: 13 }
    14) { IDX: <null>, IDY: 10_#14, iY: 14 }
    15) { IDX: <null>, IDY: 10_#15, iY: 15 }
    16) { IDX: <null>, IDY: 11_#16, iY: 16 }
    17) { IDX: <null>, IDY: 11_#17, iY: 17 }
    18) { IDX: <null>, IDY: 12_#18, iY: 18 }
    19) { IDX: <null>, IDY: 12_#19, iY: 19 }
    20) { IDX: <null>, IDY: 14_#20, iY: 20 }
    21) { IDX: <null>, IDY: 14_#21, iY: 21 }
    22) { IDX: <null>, IDY: 15_#22, iY: 22 }
    23) { IDX: <null>, IDY: 15_#23, iY: 23 }
    24) { IDX: <null>, IDY: 16_#24, iY: 24 }
    25) { IDX: <null>, IDY: 16_#25, iY: 25 }
    26) { IDX: <null>, IDY: _#26, iY: 26 }
    27) { IDX: <null>, IDY: _#27, iY: 27 }
    28) { IDX: <null>, IDY: 19_#28, iY: 28 }
    29) { IDX: <null>, IDY: 19_#29, iY: 29 }
26) Sequence: Seq<{str,str,i8}>
     0) { IDX: <null>, IDY: _#0, iY: 0 }
     1) { IDX: <null>, IDY: _#1, iY: 1 }
     2) { IDX: <null>, IDY: _#2, iY: 2 }
27) Sequence: Seq<{str,str,i8}>
     0) { IDX: <null>, IDY: 11_#0, iY: 0 }
     1) { IDX: <null>, IDY: 12_#1, iY: 1 }
     2) { IDX: <null>, IDY: 13_#2, iY: 2 }
28) Sequence: Seq<{str,str,i8}>
29) <null>
30) <null>
31) <null>
32) <null>
33) <null>
34) <null>
35) <null>
*** Ctx ping count: 157
    [0:3](108=0+0+108): KeyJoin(*3: *1x, *5: *2x, *3.V, *5.V, Ref<{IDX:s, IDY:s, iY:i8?}>({IDX:*3.ID, IDY:*5.ID, iY:#4}), {IDX:*3.ID[, IDY:str(<null>), iY:null:i8?]}, {IDY:*5.ID, iY:Opt<i8?>(#4)[, IDX:str(<null>)]})
    [3:5](49=7+42): CrossJoin(*1: XSi, *2: YSi, true, KeyJoin(*3: *1, *5: *2, *3.V, *5.V, Ref<{IDX:s, IDY:s, iY:i8?}>({IDX:*3.ID, IDY:*5.ID, iY:#4}), {IDX:*3.ID[, IDY:str(<null>), iY:null:i8?]}, {IDY:*5.ID, iY:Opt<i8?>(#4)[, IDX:str(<null>)]}))
###

**** New definitions: TA, type: {Id:i8, Key:{X:i8, Y:{U:i8, V:r8}}}*
**** New definitions: TB, type: {A:i8, B:{X:i8, Y:{U:i8, V:r8}}}*

> TA
TA : {Id:i8, Key:{X:i8, Y:{U:i8, V:r8}}}*
BndKind:Global, Type:{Id:i8, Key:{X:i8, Y:{U:i8, V:r8}}}*, Bnd:(Global(TA))
// (∂.TA:{Id:i8, Key:{X:i8, Y:{U:i8, V:r8}}}*) : {Id:i8, Key:{X:i8, Y:{U:i8, V:r8}}}*
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,{i8,{i8,r8}}}>
      1) stloc.0 [Seq<{i8,{i8,{i8,r8}}}>]
      1) ldloc.0 [Seq<{i8,{i8,{i8,r8}}}>]
      1) ret
  Total Size: 11

Func sig: (TA:{Id:i8, Key:{X:i8, Y:{U:i8, V:r8}}}*) to {Id:i8, Key:{X:i8, Y:{U:i8, V:r8}}}*
Sequence: Seq<{i8,{i8,{i8,r8}}}>
 0) { Id: 0, Key: { X: 0, Y: { U: 0, V: 0 } } }
 1) { Id: 1, Key: { X: 1, Y: { U: 1, V: 0.5 } } }
 2) { Id: 2, Key: { X: 2, Y: { U: 4, V: 4 } } }
 3) { Id: 3, Key: { X: 3, Y: { U: 9, V: 13.5 } } }
 4) { Id: 4, Key: { X: 4, Y: { U: 16, V: 32 } } }
###
> TB
TB : {A:i8, B:{X:i8, Y:{U:i8, V:r8}}}*
BndKind:Global, Type:{A:i8, B:{X:i8, Y:{U:i8, V:r8}}}*, Bnd:(Global(TB))
// (∂.TB:{A:i8, B:{X:i8, Y:{U:i8, V:r8}}}*) : {A:i8, B:{X:i8, Y:{U:i8, V:r8}}}*
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,{i8,{i8,r8}}}>
      1) stloc.0 [Seq<{i8,{i8,{i8,r8}}}>]
      1) ldloc.0 [Seq<{i8,{i8,{i8,r8}}}>]
      1) ret
  Total Size: 11

Func sig: (TB:{A:i8, B:{X:i8, Y:{U:i8, V:r8}}}*) to {A:i8, B:{X:i8, Y:{U:i8, V:r8}}}*
Sequence: Seq<{i8,{i8,{i8,r8}}}>
 0) { A: 0, B: { X: 0, Y: { U: 0, V: 0 } } }
 1) { A: 1, B: { X: 3, Y: { U: 9, V: 13.5 } } }
 2) { A: 2, B: { X: 1, Y: { U: 1, V: 0.5 } } }
 3) { A: 3, B: { X: 4, Y: { U: 16, V: 32 } } }
 4) { A: 4, B: { X: 2, Y: { U: 4, V: 4 } } }
 5) { A: 5, B: { X: 0, Y: { U: 0, V: 0 } } }
 6) { A: 6, B: { X: 3, Y: { U: 9, V: 13.5 } } }
 7) { A: 7, B: { X: 1, Y: { U: 1, V: 0.5 } } }
 8) { A: 8, B: { X: 4, Y: { U: 16, V: 32 } } }
 9) { A: 9, B: { X: 2, Y: { U: 4, V: 4 } } }
10) { A: 10, B: { X: 0, Y: { U: 0, V: 0 } } }
11) { A: 11, B: { X: 3, Y: { U: 9, V: 13.5 } } }
12) { A: 12, B: { X: 1, Y: { U: 1, V: 0.5 } } }
13) { A: 13, B: { X: 4, Y: { U: 16, V: 32 } } }
14) { A: 14, B: { X: 2, Y: { U: 4, V: 4 } } }
15) { A: 15, B: { X: 0, Y: { U: 0, V: 0 } } }
16) { A: 16, B: { X: 3, Y: { U: 9, V: 13.5 } } }
17) { A: 17, B: { X: 1, Y: { U: 1, V: 0.5 } } }
18) { A: 18, B: { X: 4, Y: { U: 16, V: 32 } } }
19) { A: 19, B: { X: 2, Y: { U: 4, V: 4 } } }
###
> KeyJoin(b:TB, a:TA, B, Key, b+>{Id})
KeyJoin(b : TB, a : TA, B, Key, b+>{ Id }) : {A:i8, B:{X:i8, Y:{U:i8, V:r8}}, Id:i8}*
BndKind:Call, Type:{A:i8, B:{X:i8, Y:{U:i8, V:r8}}, Id:i8}*, Bnd:(Call(∂.KeyJoin([map:1] Global(TB), [map:2] Global(TA), GetField(Scope(1), B), GetField(Scope(2), Key), SetFields([with:3] Scope(1), Id : GetField(Scope(2), Id)))))
// (<ctx>, ∂.TB:{A:i8, B:{X:i8, Y:{U:i8, V:r8}}}*, ∂.TA:{Id:i8, Key:{X:i8, Y:{U:i8, V:r8}}}*) : {A:i8, B:{X:i8, Y:{U:i8, V:r8}}, Id:i8}*
KeyJoin_2(Arr<obj>, {i8,{i8,{i8,r8}}}):{i8,{i8,r8}}
      1) ldarg.1 [{i8,{i8,{i8,r8}}}]
      5) ldfld {i8,{i8,{i8,r8}}}::_F1:{i8,{i8,r8}}
      1) ret
  Total Size: 7

KeyJoin_3(Arr<obj>, {i8,{i8,{i8,r8}}}):{i8,{i8,r8}}
      1) ldarg.1 [{i8,{i8,{i8,r8}}}]
      5) ldfld {i8,{i8,{i8,r8}}}::_F1:{i8,{i8,r8}}
      1) ret
  Total Size: 7

KeyJoin_4(Arr<obj>, {i8,{i8,{i8,r8}}}, {i8,{i8,{i8,r8}}}):{i8,{i8,{i8,r8}},i8}
      5) newobj {i8,{i8,{i8,r8}},i8}()
      1) dup
      1) ldc.i4.5
      5) stfld {i8,{i8,{i8,r8}},i8}::_B0:u1
      1) stloc.0 [{i8,{i8,{i8,r8}},i8}]
      1) ldloc.0 [{i8,{i8,{i8,r8}},i8}]
      1) ldarg.2 [{i8,{i8,{i8,r8}}}]
      5) ldfld {i8,{i8,{i8,r8}}}::_F0:i8
      5) stfld {i8,{i8,{i8,r8}},i8}::_F2:i8
      1) ldloc.0 [{i8,{i8,{i8,r8}},i8}]
      1) ldarg.1 [{i8,{i8,{i8,r8}}}]
      5) ldfld {i8,{i8,{i8,r8}}}::_F0:i8
      5) stfld {i8,{i8,{i8,r8}},i8}::_F0:i8
      1) ldarg.1 [{i8,{i8,{i8,r8}}}]
      5) ldfld {i8,{i8,{i8,r8}}}::_F1:{i8,{i8,r8}}
      5) brfalse [0]
      1) ldloc.0 [{i8,{i8,{i8,r8}},i8}]
      1) dup
      1) dup
      5) ldfld {i8,{i8,{i8,r8}},i8}::_B0:u1
      1) ldc.i4.2
      1) or
      5) stfld {i8,{i8,{i8,r8}},i8}::_B0:u1
      1) ldarg.1 [{i8,{i8,{i8,r8}}}]
      5) ldfld {i8,{i8,{i8,r8}}}::_F1:{i8,{i8,r8}}
      5) stfld {i8,{i8,{i8,r8}},i8}::_F1:{i8,{i8,r8}}
  Label [0]:
      1) ldloc.0 [{i8,{i8,{i8,r8}},i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 89

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):ExecCtx
      1) stloc.0 [ExecCtx]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,{i8,{i8,r8}}}>
      1) stloc.1 [Seq<{i8,{i8,{i8,r8}}}>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.2
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,{i8,{i8,r8}}}>
      1) stloc.2 [Seq<{i8,{i8,{i8,r8}}}>]
      1) ldloc.1 [Seq<{i8,{i8,{i8,r8}}}>]
      1) ldloc.2 [Seq<{i8,{i8,{i8,r8}}}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<{i8,{i8,{i8,r8}}},{i8,{i8,r8}}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [Func<{i8,{i8,{i8,r8}}},{i8,{i8,r8}}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Func<{i8,{i8,{i8,r8}}},{i8,{i8,{i8,r8}}},{i8,{i8,{i8,r8}},i8}>]
      1) ldnull
      1) ldnull
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.3
      5) ldelem [EqualityComparer<{i8,{i8,r8}}>]
      1) ldc.i4.1
      1) ldloc.0 [ExecCtx]
      1) ldc.i4.0
      5) call static KeyJoinGen::Exec(Seq<{i8,{i8,{i8,r8}}}>, Seq<{i8,{i8,{i8,r8}}}>, Func<{i8,{i8,{i8,r8}}},{i8,{i8,r8}}>, Func<{i8,{i8,{i8,r8}}},{i8,{i8,r8}}>, Func<{i8,{i8,{i8,r8}}},{i8,{i8,{i8,r8}}},{i8,{i8,{i8,r8}},i8}>, Func<{i8,{i8,{i8,r8}}},{i8,{i8,{i8,r8}},i8}>, Func<{i8,{i8,{i8,r8}}},{i8,{i8,{i8,r8}},i8}>, EqualityComparer<{i8,{i8,r8}}>, bool, ExecCtx, i4):Seq<{i8,{i8,{i8,r8}},i8}>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<{i8,{i8,{i8,r8}},i8}>):Seq<{i8,{i8,{i8,r8}},i8}>
      1) ret
  Total Size: 73

Func sig: (<ctx>:x, TB:{A:i8, B:{X:i8, Y:{U:i8, V:r8}}}*, TA:{Id:i8, Key:{X:i8, Y:{U:i8, V:r8}}}*) to {A:i8, B:{X:i8, Y:{U:i8, V:r8}}, Id:i8}*
Sequence: Seq<{i8,{i8,{i8,r8}},i8}>
 0) { A: 0, B: { X: 0, Y: { U: 0, V: 0 } }, Id: 0 }
 1) { A: 1, B: { X: 3, Y: { U: 9, V: 13.5 } }, Id: 3 }
 2) { A: 2, B: { X: 1, Y: { U: 1, V: 0.5 } }, Id: 1 }
 3) { A: 3, B: { X: 4, Y: { U: 16, V: 32 } }, Id: 4 }
 4) { A: 4, B: { X: 2, Y: { U: 4, V: 4 } }, Id: 2 }
 5) { A: 5, B: { X: 0, Y: { U: 0, V: 0 } }, Id: 0 }
 6) { A: 6, B: { X: 3, Y: { U: 9, V: 13.5 } }, Id: 3 }
 7) { A: 7, B: { X: 1, Y: { U: 1, V: 0.5 } }, Id: 1 }
 8) { A: 8, B: { X: 4, Y: { U: 16, V: 32 } }, Id: 4 }
 9) { A: 9, B: { X: 2, Y: { U: 4, V: 4 } }, Id: 2 }
10) { A: 10, B: { X: 0, Y: { U: 0, V: 0 } }, Id: 0 }
11) { A: 11, B: { X: 3, Y: { U: 9, V: 13.5 } }, Id: 3 }
12) { A: 12, B: { X: 1, Y: { U: 1, V: 0.5 } }, Id: 1 }
13) { A: 13, B: { X: 4, Y: { U: 16, V: 32 } }, Id: 4 }
14) { A: 14, B: { X: 2, Y: { U: 4, V: 4 } }, Id: 2 }
15) { A: 15, B: { X: 0, Y: { U: 0, V: 0 } }, Id: 0 }
16) { A: 16, B: { X: 3, Y: { U: 9, V: 13.5 } }, Id: 3 }
17) { A: 17, B: { X: 1, Y: { U: 1, V: 0.5 } }, Id: 1 }
18) { A: 18, B: { X: 4, Y: { U: 16, V: 32 } }, Id: 4 }
19) { A: 19, B: { X: 2, Y: { U: 4, V: 4 } }, Id: 2 }
*** Ctx ping count: 4
    [0:3](4=0+0+4): KeyJoin(*1: TB, *2: TA, *1.B, *2.Key, SetFields(!3: *1, Id : *2.Id))
###

**** New definitions: TA, type: {Id:i8, Key:{X:i8, Y:(i8, r8)}}*
**** New definitions: TB, type: {A:i8, B:{X:i8, Y:(i8, r8)}}*

> TA
TA : {Id:i8, Key:{X:i8, Y:(i8, r8)}}*
BndKind:Global, Type:{Id:i8, Key:{X:i8, Y:(i8, r8)}}*, Bnd:(Global(TA))
// (∂.TA:{Id:i8, Key:{X:i8, Y:(i8, r8)}}*) : {Id:i8, Key:{X:i8, Y:(i8, r8)}}*
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,{i8,(i8,r8)}}>
      1) stloc.0 [Seq<{i8,{i8,(i8,r8)}}>]
      1) ldloc.0 [Seq<{i8,{i8,(i8,r8)}}>]
      1) ret
  Total Size: 11

Func sig: (TA:{Id:i8, Key:{X:i8, Y:(i8, r8)}}*) to {Id:i8, Key:{X:i8, Y:(i8, r8)}}*
Sequence: Seq<{i8,{i8,(i8,r8)}}>
 0) { Id: 0, Key: { X: 0, Y: (0, 0) } }
 1) { Id: 1, Key: { X: 1, Y: (1, 0.5) } }
 2) { Id: 2, Key: { X: 2, Y: (4, 4) } }
 3) { Id: 3, Key: { X: 3, Y: (9, 13.5) } }
 4) { Id: 4, Key: { X: 4, Y: (16, 32) } }
###
> TB
TB : {A:i8, B:{X:i8, Y:(i8, r8)}}*
BndKind:Global, Type:{A:i8, B:{X:i8, Y:(i8, r8)}}*, Bnd:(Global(TB))
// (∂.TB:{A:i8, B:{X:i8, Y:(i8, r8)}}*) : {A:i8, B:{X:i8, Y:(i8, r8)}}*
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,{i8,(i8,r8)}}>
      1) stloc.0 [Seq<{i8,{i8,(i8,r8)}}>]
      1) ldloc.0 [Seq<{i8,{i8,(i8,r8)}}>]
      1) ret
  Total Size: 11

Func sig: (TB:{A:i8, B:{X:i8, Y:(i8, r8)}}*) to {A:i8, B:{X:i8, Y:(i8, r8)}}*
Sequence: Seq<{i8,{i8,(i8,r8)}}>
 0) { A: 0, B: { X: 0, Y: (0, 0) } }
 1) { A: 1, B: { X: 3, Y: (9, 13.5) } }
 2) { A: 2, B: { X: 1, Y: (1, 0.5) } }
 3) { A: 3, B: { X: 4, Y: (16, 32) } }
 4) { A: 4, B: { X: 2, Y: (4, 4) } }
 5) { A: 5, B: { X: 0, Y: (0, 0) } }
 6) { A: 6, B: { X: 3, Y: (9, 13.5) } }
 7) { A: 7, B: { X: 1, Y: (1, 0.5) } }
 8) { A: 8, B: { X: 4, Y: (16, 32) } }
 9) { A: 9, B: { X: 2, Y: (4, 4) } }
10) { A: 10, B: { X: 0, Y: (0, 0) } }
11) { A: 11, B: { X: 3, Y: (9, 13.5) } }
12) { A: 12, B: { X: 1, Y: (1, 0.5) } }
13) { A: 13, B: { X: 4, Y: (16, 32) } }
14) { A: 14, B: { X: 2, Y: (4, 4) } }
15) { A: 15, B: { X: 0, Y: (0, 0) } }
16) { A: 16, B: { X: 3, Y: (9, 13.5) } }
17) { A: 17, B: { X: 1, Y: (1, 0.5) } }
18) { A: 18, B: { X: 4, Y: (16, 32) } }
19) { A: 19, B: { X: 2, Y: (4, 4) } }
###
> KeyJoin(b:TB, a:TA, B, Key, b+>{Id})
KeyJoin(b : TB, a : TA, B, Key, b+>{ Id }) : {A:i8, B:{X:i8, Y:(i8, r8)}, Id:i8}*
BndKind:Call, Type:{A:i8, B:{X:i8, Y:(i8, r8)}, Id:i8}*, Bnd:(Call(∂.KeyJoin([map:1] Global(TB), [map:2] Global(TA), GetField(Scope(1), B), GetField(Scope(2), Key), SetFields([with:3] Scope(1), Id : GetField(Scope(2), Id)))))
// (<ctx>, ∂.TB:{A:i8, B:{X:i8, Y:(i8, r8)}}*, ∂.TA:{Id:i8, Key:{X:i8, Y:(i8, r8)}}*) : {A:i8, B:{X:i8, Y:(i8, r8)}, Id:i8}*
KeyJoin_2(Arr<obj>, {i8,{i8,(i8,r8)}}):{i8,(i8,r8)}
      1) ldarg.1 [{i8,{i8,(i8,r8)}}]
      5) ldfld {i8,{i8,(i8,r8)}}::_F1:{i8,(i8,r8)}
      1) ret
  Total Size: 7

KeyJoin_3(Arr<obj>, {i8,{i8,(i8,r8)}}):{i8,(i8,r8)}
      1) ldarg.1 [{i8,{i8,(i8,r8)}}]
      5) ldfld {i8,{i8,(i8,r8)}}::_F1:{i8,(i8,r8)}
      1) ret
  Total Size: 7

KeyJoin_4(Arr<obj>, {i8,{i8,(i8,r8)}}, {i8,{i8,(i8,r8)}}):{i8,{i8,(i8,r8)},i8}
      5) newobj {i8,{i8,(i8,r8)},i8}()
      1) dup
      1) ldc.i4.5
      5) stfld {i8,{i8,(i8,r8)},i8}::_B0:u1
      1) stloc.0 [{i8,{i8,(i8,r8)},i8}]
      1) ldloc.0 [{i8,{i8,(i8,r8)},i8}]
      1) ldarg.2 [{i8,{i8,(i8,r8)}}]
      5) ldfld {i8,{i8,(i8,r8)}}::_F0:i8
      5) stfld {i8,{i8,(i8,r8)},i8}::_F2:i8
      1) ldloc.0 [{i8,{i8,(i8,r8)},i8}]
      1) ldarg.1 [{i8,{i8,(i8,r8)}}]
      5) ldfld {i8,{i8,(i8,r8)}}::_F0:i8
      5) stfld {i8,{i8,(i8,r8)},i8}::_F0:i8
      1) ldarg.1 [{i8,{i8,(i8,r8)}}]
      5) ldfld {i8,{i8,(i8,r8)}}::_F1:{i8,(i8,r8)}
      5) brfalse [0]
      1) ldloc.0 [{i8,{i8,(i8,r8)},i8}]
      1) dup
      1) dup
      5) ldfld {i8,{i8,(i8,r8)},i8}::_B0:u1
      1) ldc.i4.2
      1) or
      5) stfld {i8,{i8,(i8,r8)},i8}::_B0:u1
      1) ldarg.1 [{i8,{i8,(i8,r8)}}]
      5) ldfld {i8,{i8,(i8,r8)}}::_F1:{i8,(i8,r8)}
      5) stfld {i8,{i8,(i8,r8)},i8}::_F1:{i8,(i8,r8)}
  Label [0]:
      1) ldloc.0 [{i8,{i8,(i8,r8)},i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 89

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):ExecCtx
      1) stloc.0 [ExecCtx]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,{i8,(i8,r8)}}>
      1) stloc.1 [Seq<{i8,{i8,(i8,r8)}}>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.2
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,{i8,(i8,r8)}}>
      1) stloc.2 [Seq<{i8,{i8,(i8,r8)}}>]
      1) ldloc.1 [Seq<{i8,{i8,(i8,r8)}}>]
      1) ldloc.2 [Seq<{i8,{i8,(i8,r8)}}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<{i8,{i8,(i8,r8)}},{i8,(i8,r8)}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [Func<{i8,{i8,(i8,r8)}},{i8,(i8,r8)}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Func<{i8,{i8,(i8,r8)}},{i8,{i8,(i8,r8)}},{i8,{i8,(i8,r8)},i8}>]
      1) ldnull
      1) ldnull
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.3
      5) ldelem [EqualityComparer<{i8,(i8,r8)}>]
      1) ldc.i4.1
      1) ldloc.0 [ExecCtx]
      1) ldc.i4.0
      5) call static KeyJoinGen::Exec(Seq<{i8,{i8,(i8,r8)}}>, Seq<{i8,{i8,(i8,r8)}}>, Func<{i8,{i8,(i8,r8)}},{i8,(i8,r8)}>, Func<{i8,{i8,(i8,r8)}},{i8,(i8,r8)}>, Func<{i8,{i8,(i8,r8)}},{i8,{i8,(i8,r8)}},{i8,{i8,(i8,r8)},i8}>, Func<{i8,{i8,(i8,r8)}},{i8,{i8,(i8,r8)},i8}>, Func<{i8,{i8,(i8,r8)}},{i8,{i8,(i8,r8)},i8}>, EqualityComparer<{i8,(i8,r8)}>, bool, ExecCtx, i4):Seq<{i8,{i8,(i8,r8)},i8}>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<{i8,{i8,(i8,r8)},i8}>):Seq<{i8,{i8,(i8,r8)},i8}>
      1) ret
  Total Size: 73

Func sig: (<ctx>:x, TB:{A:i8, B:{X:i8, Y:(i8, r8)}}*, TA:{Id:i8, Key:{X:i8, Y:(i8, r8)}}*) to {A:i8, B:{X:i8, Y:(i8, r8)}, Id:i8}*
Sequence: Seq<{i8,{i8,(i8,r8)},i8}>
 0) { A: 0, B: { X: 0, Y: (0, 0) }, Id: 0 }
 1) { A: 1, B: { X: 3, Y: (9, 13.5) }, Id: 3 }
 2) { A: 2, B: { X: 1, Y: (1, 0.5) }, Id: 1 }
 3) { A: 3, B: { X: 4, Y: (16, 32) }, Id: 4 }
 4) { A: 4, B: { X: 2, Y: (4, 4) }, Id: 2 }
 5) { A: 5, B: { X: 0, Y: (0, 0) }, Id: 0 }
 6) { A: 6, B: { X: 3, Y: (9, 13.5) }, Id: 3 }
 7) { A: 7, B: { X: 1, Y: (1, 0.5) }, Id: 1 }
 8) { A: 8, B: { X: 4, Y: (16, 32) }, Id: 4 }
 9) { A: 9, B: { X: 2, Y: (4, 4) }, Id: 2 }
10) { A: 10, B: { X: 0, Y: (0, 0) }, Id: 0 }
11) { A: 11, B: { X: 3, Y: (9, 13.5) }, Id: 3 }
12) { A: 12, B: { X: 1, Y: (1, 0.5) }, Id: 1 }
13) { A: 13, B: { X: 4, Y: (16, 32) }, Id: 4 }
14) { A: 14, B: { X: 2, Y: (4, 4) }, Id: 2 }
15) { A: 15, B: { X: 0, Y: (0, 0) }, Id: 0 }
16) { A: 16, B: { X: 3, Y: (9, 13.5) }, Id: 3 }
17) { A: 17, B: { X: 1, Y: (1, 0.5) }, Id: 1 }
18) { A: 18, B: { X: 4, Y: (16, 32) }, Id: 4 }
19) { A: 19, B: { X: 2, Y: (4, 4) }, Id: 2 }
*** Ctx ping count: 4
    [0:3](4=0+0+4): KeyJoin(*1: TB, *2: TA, *1.B, *2.Key, SetFields(!3: *1, Id : *2.Id))
###

**** New definitions: TA, type: {Id:i8, Key:{X:i8, Y:{U:i8, V:r8?}}}*
**** New definitions: TB, type: {A:i8, B:{X:i8, Y:{U:i8, V:r8?}}}*

> TA
TA : {Id:i8, Key:{X:i8, Y:{U:i8, V:r8?}}}*
BndKind:Global, Type:{Id:i8, Key:{X:i8, Y:{U:i8, V:r8?}}}*, Bnd:(Global(TA))
// (∂.TA:{Id:i8, Key:{X:i8, Y:{U:i8, V:r8?}}}*) : {Id:i8, Key:{X:i8, Y:{U:i8, V:r8?}}}*
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,{i8,{i8,r8}}}>
      1) stloc.0 [Seq<{i8,{i8,{i8,r8}}}>]
      1) ldloc.0 [Seq<{i8,{i8,{i8,r8}}}>]
      1) ret
  Total Size: 11

Func sig: (TA:{Id:i8, Key:{X:i8, Y:{U:i8, V:r8?}}}*) to {Id:i8, Key:{X:i8, Y:{U:i8, V:r8?}}}*
Sequence: Seq<{i8,{i8,{i8,r8}}}>
 0) { Id: 0, Key: { X: 0, Y: { U: 0, V: 0 } } }
 1) { Id: 1, Key: { X: 1, Y: { U: 1, V: 0.5 } } }
 2) { Id: 2, Key: { X: 2, Y: { U: 4, V: <null> } } }
 3) { Id: 3, Key: { X: 3, Y: { U: 9, V: 13.5 } } }
 4) { Id: 4, Key: { X: 4, Y: { U: 16, V: 32 } } }
###
> TB
TB : {A:i8, B:{X:i8, Y:{U:i8, V:r8?}}}*
BndKind:Global, Type:{A:i8, B:{X:i8, Y:{U:i8, V:r8?}}}*, Bnd:(Global(TB))
// (∂.TB:{A:i8, B:{X:i8, Y:{U:i8, V:r8?}}}*) : {A:i8, B:{X:i8, Y:{U:i8, V:r8?}}}*
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,{i8,{i8,r8}}}>
      1) stloc.0 [Seq<{i8,{i8,{i8,r8}}}>]
      1) ldloc.0 [Seq<{i8,{i8,{i8,r8}}}>]
      1) ret
  Total Size: 11

Func sig: (TB:{A:i8, B:{X:i8, Y:{U:i8, V:r8?}}}*) to {A:i8, B:{X:i8, Y:{U:i8, V:r8?}}}*
Sequence: Seq<{i8,{i8,{i8,r8}}}>
 0) { A: 0, B: { X: 0, Y: { U: 0, V: 0 } } }
 1) { A: 1, B: { X: 3, Y: { U: 9, V: 13.5 } } }
 2) { A: 2, B: { X: 1, Y: { U: 1, V: 0.5 } } }
 3) { A: 3, B: { X: 4, Y: { U: 16, V: 32 } } }
 4) { A: 4, B: { X: 2, Y: { U: 4, V: <null> } } }
 5) { A: 5, B: { X: 0, Y: { U: 0, V: 0 } } }
 6) { A: 6, B: { X: 3, Y: { U: 9, V: 13.5 } } }
 7) { A: 7, B: { X: 1, Y: { U: 1, V: 0.5 } } }
 8) { A: 8, B: { X: 4, Y: { U: 16, V: 32 } } }
 9) { A: 9, B: { X: 2, Y: { U: 4, V: <null> } } }
10) { A: 10, B: { X: 0, Y: { U: 0, V: 0 } } }
11) { A: 11, B: { X: 3, Y: { U: 9, V: 13.5 } } }
12) { A: 12, B: { X: 1, Y: { U: 1, V: 0.5 } } }
13) { A: 13, B: { X: 4, Y: { U: 16, V: 32 } } }
14) { A: 14, B: { X: 2, Y: { U: 4, V: <null> } } }
15) { A: 15, B: { X: 0, Y: { U: 0, V: 0 } } }
16) { A: 16, B: { X: 3, Y: { U: 9, V: 13.5 } } }
17) { A: 17, B: { X: 1, Y: { U: 1, V: 0.5 } } }
18) { A: 18, B: { X: 4, Y: { U: 16, V: 32 } } }
19) { A: 19, B: { X: 2, Y: { U: 4, V: <null> } } }
###
> KeyJoin(b:TB, a:TA, B, Key, b+>{Id})
KeyJoin(b : TB, a : TA, B, Key, b+>{ Id }) : {A:i8, B:{X:i8, Y:{U:i8, V:r8?}}, Id:i8}*
BndKind:Call, Type:{A:i8, B:{X:i8, Y:{U:i8, V:r8?}}, Id:i8}*, Bnd:(Call(∂.KeyJoin([map:1] Global(TB), [map:2] Global(TA), GetField(Scope(1), B), GetField(Scope(2), Key), SetFields([with:3] Scope(1), Id : GetField(Scope(2), Id)))))
// (<ctx>, ∂.TB:{A:i8, B:{X:i8, Y:{U:i8, V:r8?}}}*, ∂.TA:{Id:i8, Key:{X:i8, Y:{U:i8, V:r8?}}}*) : {A:i8, B:{X:i8, Y:{U:i8, V:r8?}}, Id:i8}*
KeyJoin_2(Arr<obj>, {i8,{i8,{i8,r8}}}):{i8,{i8,r8}}
      1) ldarg.1 [{i8,{i8,{i8,r8}}}]
      5) ldfld {i8,{i8,{i8,r8}}}::_F1:{i8,{i8,r8}}
      1) ret
  Total Size: 7

KeyJoin_3(Arr<obj>, {i8,{i8,{i8,r8}}}):{i8,{i8,r8}}
      1) ldarg.1 [{i8,{i8,{i8,r8}}}]
      5) ldfld {i8,{i8,{i8,r8}}}::_F1:{i8,{i8,r8}}
      1) ret
  Total Size: 7

KeyJoin_4(Arr<obj>, {i8,{i8,{i8,r8}}}, {i8,{i8,{i8,r8}}}):{i8,{i8,{i8,r8}},i8}
      5) newobj {i8,{i8,{i8,r8}},i8}()
      1) dup
      1) ldc.i4.5
      5) stfld {i8,{i8,{i8,r8}},i8}::_B0:u1
      1) stloc.0 [{i8,{i8,{i8,r8}},i8}]
      1) ldloc.0 [{i8,{i8,{i8,r8}},i8}]
      1) ldarg.2 [{i8,{i8,{i8,r8}}}]
      5) ldfld {i8,{i8,{i8,r8}}}::_F0:i8
      5) stfld {i8,{i8,{i8,r8}},i8}::_F2:i8
      1) ldloc.0 [{i8,{i8,{i8,r8}},i8}]
      1) ldarg.1 [{i8,{i8,{i8,r8}}}]
      5) ldfld {i8,{i8,{i8,r8}}}::_F0:i8
      5) stfld {i8,{i8,{i8,r8}},i8}::_F0:i8
      1) ldarg.1 [{i8,{i8,{i8,r8}}}]
      5) ldfld {i8,{i8,{i8,r8}}}::_F1:{i8,{i8,r8}}
      5) brfalse [0]
      1) ldloc.0 [{i8,{i8,{i8,r8}},i8}]
      1) dup
      1) dup
      5) ldfld {i8,{i8,{i8,r8}},i8}::_B0:u1
      1) ldc.i4.2
      1) or
      5) stfld {i8,{i8,{i8,r8}},i8}::_B0:u1
      1) ldarg.1 [{i8,{i8,{i8,r8}}}]
      5) ldfld {i8,{i8,{i8,r8}}}::_F1:{i8,{i8,r8}}
      5) stfld {i8,{i8,{i8,r8}},i8}::_F1:{i8,{i8,r8}}
  Label [0]:
      1) ldloc.0 [{i8,{i8,{i8,r8}},i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 89

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):ExecCtx
      1) stloc.0 [ExecCtx]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,{i8,{i8,r8}}}>
      1) stloc.1 [Seq<{i8,{i8,{i8,r8}}}>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.2
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,{i8,{i8,r8}}}>
      1) stloc.2 [Seq<{i8,{i8,{i8,r8}}}>]
      1) ldloc.1 [Seq<{i8,{i8,{i8,r8}}}>]
      1) ldloc.2 [Seq<{i8,{i8,{i8,r8}}}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<{i8,{i8,{i8,r8}}},{i8,{i8,r8}}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [Func<{i8,{i8,{i8,r8}}},{i8,{i8,r8}}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Func<{i8,{i8,{i8,r8}}},{i8,{i8,{i8,r8}}},{i8,{i8,{i8,r8}},i8}>]
      1) ldnull
      1) ldnull
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.3
      5) ldelem [EqualityComparer<{i8,{i8,r8}}>]
      1) ldc.i4.1
      1) ldloc.0 [ExecCtx]
      1) ldc.i4.0
      5) call static KeyJoinGen::Exec(Seq<{i8,{i8,{i8,r8}}}>, Seq<{i8,{i8,{i8,r8}}}>, Func<{i8,{i8,{i8,r8}}},{i8,{i8,r8}}>, Func<{i8,{i8,{i8,r8}}},{i8,{i8,r8}}>, Func<{i8,{i8,{i8,r8}}},{i8,{i8,{i8,r8}}},{i8,{i8,{i8,r8}},i8}>, Func<{i8,{i8,{i8,r8}}},{i8,{i8,{i8,r8}},i8}>, Func<{i8,{i8,{i8,r8}}},{i8,{i8,{i8,r8}},i8}>, EqualityComparer<{i8,{i8,r8}}>, bool, ExecCtx, i4):Seq<{i8,{i8,{i8,r8}},i8}>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<{i8,{i8,{i8,r8}},i8}>):Seq<{i8,{i8,{i8,r8}},i8}>
      1) ret
  Total Size: 73

Func sig: (<ctx>:x, TB:{A:i8, B:{X:i8, Y:{U:i8, V:r8?}}}*, TA:{Id:i8, Key:{X:i8, Y:{U:i8, V:r8?}}}*) to {A:i8, B:{X:i8, Y:{U:i8, V:r8?}}, Id:i8}*
Sequence: Seq<{i8,{i8,{i8,r8}},i8}>
 0) { A: 0, B: { X: 0, Y: { U: 0, V: 0 } }, Id: 0 }
 1) { A: 1, B: { X: 3, Y: { U: 9, V: 13.5 } }, Id: 3 }
 2) { A: 2, B: { X: 1, Y: { U: 1, V: 0.5 } }, Id: 1 }
 3) { A: 3, B: { X: 4, Y: { U: 16, V: 32 } }, Id: 4 }
 4) { A: 5, B: { X: 0, Y: { U: 0, V: 0 } }, Id: 0 }
 5) { A: 6, B: { X: 3, Y: { U: 9, V: 13.5 } }, Id: 3 }
 6) { A: 7, B: { X: 1, Y: { U: 1, V: 0.5 } }, Id: 1 }
 7) { A: 8, B: { X: 4, Y: { U: 16, V: 32 } }, Id: 4 }
 8) { A: 10, B: { X: 0, Y: { U: 0, V: 0 } }, Id: 0 }
 9) { A: 11, B: { X: 3, Y: { U: 9, V: 13.5 } }, Id: 3 }
10) { A: 12, B: { X: 1, Y: { U: 1, V: 0.5 } }, Id: 1 }
11) { A: 13, B: { X: 4, Y: { U: 16, V: 32 } }, Id: 4 }
12) { A: 15, B: { X: 0, Y: { U: 0, V: 0 } }, Id: 0 }
13) { A: 16, B: { X: 3, Y: { U: 9, V: 13.5 } }, Id: 3 }
14) { A: 17, B: { X: 1, Y: { U: 1, V: 0.5 } }, Id: 1 }
15) { A: 18, B: { X: 4, Y: { U: 16, V: 32 } }, Id: 4 }
*** Ctx ping count: 8
    [0:3](8=4+0+4): KeyJoin(*1: TB, *2: TA, *1.B, *2.Key, SetFields(!3: *1, Id : *2.Id))
###

**** New definitions: TA, type: {Id:i8, Key:{X:i8, Y:{U:i8, V:r8}}}*
**** New definitions: TB, type: {A:i8, B:{X:i8, Y:{U:i8, V:r8}}}*

> TA
TA : {Id:i8, Key:{X:i8, Y:{U:i8, V:r8}}}*
BndKind:Global, Type:{Id:i8, Key:{X:i8, Y:{U:i8, V:r8}}}*, Bnd:(Global(TA))
// (∂.TA:{Id:i8, Key:{X:i8, Y:{U:i8, V:r8}}}*) : {Id:i8, Key:{X:i8, Y:{U:i8, V:r8}}}*
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,{i8,{i8,r8}}}>
      1) stloc.0 [Seq<{i8,{i8,{i8,r8}}}>]
      1) ldloc.0 [Seq<{i8,{i8,{i8,r8}}}>]
      1) ret
  Total Size: 11

Func sig: (TA:{Id:i8, Key:{X:i8, Y:{U:i8, V:r8}}}*) to {Id:i8, Key:{X:i8, Y:{U:i8, V:r8}}}*
Sequence: Seq<{i8,{i8,{i8,r8}}}>
 0) { Id: 0, Key: { X: 0, Y: { U: 0, V: 0 } } }
 1) { Id: 1, Key: { X: 1, Y: { U: 1, V: 0.5 } } }
 2) { Id: 2, Key: { X: 2, Y: { U: 4, V: NaN } } }
 3) { Id: 3, Key: { X: 3, Y: { U: 9, V: 13.5 } } }
 4) { Id: 4, Key: { X: 4, Y: { U: 16, V: 32 } } }
###
> TB
TB : {A:i8, B:{X:i8, Y:{U:i8, V:r8}}}*
BndKind:Global, Type:{A:i8, B:{X:i8, Y:{U:i8, V:r8}}}*, Bnd:(Global(TB))
// (∂.TB:{A:i8, B:{X:i8, Y:{U:i8, V:r8}}}*) : {A:i8, B:{X:i8, Y:{U:i8, V:r8}}}*
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,{i8,{i8,r8}}}>
      1) stloc.0 [Seq<{i8,{i8,{i8,r8}}}>]
      1) ldloc.0 [Seq<{i8,{i8,{i8,r8}}}>]
      1) ret
  Total Size: 11

Func sig: (TB:{A:i8, B:{X:i8, Y:{U:i8, V:r8}}}*) to {A:i8, B:{X:i8, Y:{U:i8, V:r8}}}*
Sequence: Seq<{i8,{i8,{i8,r8}}}>
 0) { A: 0, B: { X: 0, Y: { U: 0, V: 0 } } }
 1) { A: 1, B: { X: 3, Y: { U: 9, V: 13.5 } } }
 2) { A: 2, B: { X: 1, Y: { U: 1, V: 0.5 } } }
 3) { A: 3, B: { X: 4, Y: { U: 16, V: 32 } } }
 4) { A: 4, B: { X: 2, Y: { U: 4, V: NaN } } }
 5) { A: 5, B: { X: 0, Y: { U: 0, V: 0 } } }
 6) { A: 6, B: { X: 3, Y: { U: 9, V: 13.5 } } }
 7) { A: 7, B: { X: 1, Y: { U: 1, V: 0.5 } } }
 8) { A: 8, B: { X: 4, Y: { U: 16, V: 32 } } }
 9) { A: 9, B: { X: 2, Y: { U: 4, V: NaN } } }
10) { A: 10, B: { X: 0, Y: { U: 0, V: 0 } } }
11) { A: 11, B: { X: 3, Y: { U: 9, V: 13.5 } } }
12) { A: 12, B: { X: 1, Y: { U: 1, V: 0.5 } } }
13) { A: 13, B: { X: 4, Y: { U: 16, V: 32 } } }
14) { A: 14, B: { X: 2, Y: { U: 4, V: NaN } } }
15) { A: 15, B: { X: 0, Y: { U: 0, V: 0 } } }
16) { A: 16, B: { X: 3, Y: { U: 9, V: 13.5 } } }
17) { A: 17, B: { X: 1, Y: { U: 1, V: 0.5 } } }
18) { A: 18, B: { X: 4, Y: { U: 16, V: 32 } } }
19) { A: 19, B: { X: 2, Y: { U: 4, V: NaN } } }
###
> KeyJoin(b:TB, a:TA, B, Key, b+>{Id})
KeyJoin(b : TB, a : TA, B, Key, b+>{ Id }) : {A:i8, B:{X:i8, Y:{U:i8, V:r8}}, Id:i8}*
BndKind:Call, Type:{A:i8, B:{X:i8, Y:{U:i8, V:r8}}, Id:i8}*, Bnd:(Call(∂.KeyJoin([map:1] Global(TB), [map:2] Global(TA), GetField(Scope(1), B), GetField(Scope(2), Key), SetFields([with:3] Scope(1), Id : GetField(Scope(2), Id)))))
// (<ctx>, ∂.TB:{A:i8, B:{X:i8, Y:{U:i8, V:r8}}}*, ∂.TA:{Id:i8, Key:{X:i8, Y:{U:i8, V:r8}}}*) : {A:i8, B:{X:i8, Y:{U:i8, V:r8}}, Id:i8}*
KeyJoin_2(Arr<obj>, {i8,{i8,{i8,r8}}}):{i8,{i8,r8}}
      1) ldarg.1 [{i8,{i8,{i8,r8}}}]
      5) ldfld {i8,{i8,{i8,r8}}}::_F1:{i8,{i8,r8}}
      1) ret
  Total Size: 7

KeyJoin_3(Arr<obj>, {i8,{i8,{i8,r8}}}):{i8,{i8,r8}}
      1) ldarg.1 [{i8,{i8,{i8,r8}}}]
      5) ldfld {i8,{i8,{i8,r8}}}::_F1:{i8,{i8,r8}}
      1) ret
  Total Size: 7

KeyJoin_4(Arr<obj>, {i8,{i8,{i8,r8}}}, {i8,{i8,{i8,r8}}}):{i8,{i8,{i8,r8}},i8}
      5) newobj {i8,{i8,{i8,r8}},i8}()
      1) dup
      1) ldc.i4.5
      5) stfld {i8,{i8,{i8,r8}},i8}::_B0:u1
      1) stloc.0 [{i8,{i8,{i8,r8}},i8}]
      1) ldloc.0 [{i8,{i8,{i8,r8}},i8}]
      1) ldarg.2 [{i8,{i8,{i8,r8}}}]
      5) ldfld {i8,{i8,{i8,r8}}}::_F0:i8
      5) stfld {i8,{i8,{i8,r8}},i8}::_F2:i8
      1) ldloc.0 [{i8,{i8,{i8,r8}},i8}]
      1) ldarg.1 [{i8,{i8,{i8,r8}}}]
      5) ldfld {i8,{i8,{i8,r8}}}::_F0:i8
      5) stfld {i8,{i8,{i8,r8}},i8}::_F0:i8
      1) ldarg.1 [{i8,{i8,{i8,r8}}}]
      5) ldfld {i8,{i8,{i8,r8}}}::_F1:{i8,{i8,r8}}
      5) brfalse [0]
      1) ldloc.0 [{i8,{i8,{i8,r8}},i8}]
      1) dup
      1) dup
      5) ldfld {i8,{i8,{i8,r8}},i8}::_B0:u1
      1) ldc.i4.2
      1) or
      5) stfld {i8,{i8,{i8,r8}},i8}::_B0:u1
      1) ldarg.1 [{i8,{i8,{i8,r8}}}]
      5) ldfld {i8,{i8,{i8,r8}}}::_F1:{i8,{i8,r8}}
      5) stfld {i8,{i8,{i8,r8}},i8}::_F1:{i8,{i8,r8}}
  Label [0]:
      1) ldloc.0 [{i8,{i8,{i8,r8}},i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 89

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):ExecCtx
      1) stloc.0 [ExecCtx]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,{i8,{i8,r8}}}>
      1) stloc.1 [Seq<{i8,{i8,{i8,r8}}}>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.2
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,{i8,{i8,r8}}}>
      1) stloc.2 [Seq<{i8,{i8,{i8,r8}}}>]
      1) ldloc.1 [Seq<{i8,{i8,{i8,r8}}}>]
      1) ldloc.2 [Seq<{i8,{i8,{i8,r8}}}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<{i8,{i8,{i8,r8}}},{i8,{i8,r8}}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [Func<{i8,{i8,{i8,r8}}},{i8,{i8,r8}}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Func<{i8,{i8,{i8,r8}}},{i8,{i8,{i8,r8}}},{i8,{i8,{i8,r8}},i8}>]
      1) ldnull
      1) ldnull
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.3
      5) ldelem [EqualityComparer<{i8,{i8,r8}}>]
      1) ldc.i4.1
      1) ldloc.0 [ExecCtx]
      1) ldc.i4.0
      5) call static KeyJoinGen::Exec(Seq<{i8,{i8,{i8,r8}}}>, Seq<{i8,{i8,{i8,r8}}}>, Func<{i8,{i8,{i8,r8}}},{i8,{i8,r8}}>, Func<{i8,{i8,{i8,r8}}},{i8,{i8,r8}}>, Func<{i8,{i8,{i8,r8}}},{i8,{i8,{i8,r8}}},{i8,{i8,{i8,r8}},i8}>, Func<{i8,{i8,{i8,r8}}},{i8,{i8,{i8,r8}},i8}>, Func<{i8,{i8,{i8,r8}}},{i8,{i8,{i8,r8}},i8}>, EqualityComparer<{i8,{i8,r8}}>, bool, ExecCtx, i4):Seq<{i8,{i8,{i8,r8}},i8}>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<{i8,{i8,{i8,r8}},i8}>):Seq<{i8,{i8,{i8,r8}},i8}>
      1) ret
  Total Size: 73

Func sig: (<ctx>:x, TB:{A:i8, B:{X:i8, Y:{U:i8, V:r8}}}*, TA:{Id:i8, Key:{X:i8, Y:{U:i8, V:r8}}}*) to {A:i8, B:{X:i8, Y:{U:i8, V:r8}}, Id:i8}*
Sequence: Seq<{i8,{i8,{i8,r8}},i8}>
 0) { A: 0, B: { X: 0, Y: { U: 0, V: 0 } }, Id: 0 }
 1) { A: 1, B: { X: 3, Y: { U: 9, V: 13.5 } }, Id: 3 }
 2) { A: 2, B: { X: 1, Y: { U: 1, V: 0.5 } }, Id: 1 }
 3) { A: 3, B: { X: 4, Y: { U: 16, V: 32 } }, Id: 4 }
 4) { A: 5, B: { X: 0, Y: { U: 0, V: 0 } }, Id: 0 }
 5) { A: 6, B: { X: 3, Y: { U: 9, V: 13.5 } }, Id: 3 }
 6) { A: 7, B: { X: 1, Y: { U: 1, V: 0.5 } }, Id: 1 }
 7) { A: 8, B: { X: 4, Y: { U: 16, V: 32 } }, Id: 4 }
 8) { A: 10, B: { X: 0, Y: { U: 0, V: 0 } }, Id: 0 }
 9) { A: 11, B: { X: 3, Y: { U: 9, V: 13.5 } }, Id: 3 }
10) { A: 12, B: { X: 1, Y: { U: 1, V: 0.5 } }, Id: 1 }
11) { A: 13, B: { X: 4, Y: { U: 16, V: 32 } }, Id: 4 }
12) { A: 15, B: { X: 0, Y: { U: 0, V: 0 } }, Id: 0 }
13) { A: 16, B: { X: 3, Y: { U: 9, V: 13.5 } }, Id: 3 }
14) { A: 17, B: { X: 1, Y: { U: 1, V: 0.5 } }, Id: 1 }
15) { A: 18, B: { X: 4, Y: { U: 16, V: 32 } }, Id: 4 }
*** Ctx ping count: 8
    [0:3](8=4+0+4): KeyJoin(*1: TB, *2: TA, *1.B, *2.Key, SetFields(!3: *1, Id : *2.Id))
###

**** New definitions: TA, type: {Id:i8, Key:{X:i8, Y:(i8, r8?)}}*
**** New definitions: TB, type: {A:i8, B:{X:i8, Y:(i8, r8?)}}*

> TA
TA : {Id:i8, Key:{X:i8, Y:(i8, r8?)}}*
BndKind:Global, Type:{Id:i8, Key:{X:i8, Y:(i8, r8?)}}*, Bnd:(Global(TA))
// (∂.TA:{Id:i8, Key:{X:i8, Y:(i8, r8?)}}*) : {Id:i8, Key:{X:i8, Y:(i8, r8?)}}*
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,{i8,(i8,Opt<r8>)}}>
      1) stloc.0 [Seq<{i8,{i8,(i8,Opt<r8>)}}>]
      1) ldloc.0 [Seq<{i8,{i8,(i8,Opt<r8>)}}>]
      1) ret
  Total Size: 11

Func sig: (TA:{Id:i8, Key:{X:i8, Y:(i8, r8?)}}*) to {Id:i8, Key:{X:i8, Y:(i8, r8?)}}*
Sequence: Seq<{i8,{i8,(i8,Opt<r8>)}}>
 0) { Id: 0, Key: { X: 0, Y: (0, 0) } }
 1) { Id: 1, Key: { X: 1, Y: (1, 0.5) } }
 2) { Id: 2, Key: { X: 2, Y: (4, <null>) } }
 3) { Id: 3, Key: { X: 3, Y: (9, 13.5) } }
 4) { Id: 4, Key: { X: 4, Y: (16, 32) } }
###
> TB
TB : {A:i8, B:{X:i8, Y:(i8, r8?)}}*
BndKind:Global, Type:{A:i8, B:{X:i8, Y:(i8, r8?)}}*, Bnd:(Global(TB))
// (∂.TB:{A:i8, B:{X:i8, Y:(i8, r8?)}}*) : {A:i8, B:{X:i8, Y:(i8, r8?)}}*
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,{i8,(i8,Opt<r8>)}}>
      1) stloc.0 [Seq<{i8,{i8,(i8,Opt<r8>)}}>]
      1) ldloc.0 [Seq<{i8,{i8,(i8,Opt<r8>)}}>]
      1) ret
  Total Size: 11

Func sig: (TB:{A:i8, B:{X:i8, Y:(i8, r8?)}}*) to {A:i8, B:{X:i8, Y:(i8, r8?)}}*
Sequence: Seq<{i8,{i8,(i8,Opt<r8>)}}>
 0) { A: 0, B: { X: 0, Y: (0, 0) } }
 1) { A: 1, B: { X: 3, Y: (9, 13.5) } }
 2) { A: 2, B: { X: 1, Y: (1, 0.5) } }
 3) { A: 3, B: { X: 4, Y: (16, 32) } }
 4) { A: 4, B: { X: 2, Y: (4, <null>) } }
 5) { A: 5, B: { X: 0, Y: (0, 0) } }
 6) { A: 6, B: { X: 3, Y: (9, 13.5) } }
 7) { A: 7, B: { X: 1, Y: (1, 0.5) } }
 8) { A: 8, B: { X: 4, Y: (16, 32) } }
 9) { A: 9, B: { X: 2, Y: (4, <null>) } }
10) { A: 10, B: { X: 0, Y: (0, 0) } }
11) { A: 11, B: { X: 3, Y: (9, 13.5) } }
12) { A: 12, B: { X: 1, Y: (1, 0.5) } }
13) { A: 13, B: { X: 4, Y: (16, 32) } }
14) { A: 14, B: { X: 2, Y: (4, <null>) } }
15) { A: 15, B: { X: 0, Y: (0, 0) } }
16) { A: 16, B: { X: 3, Y: (9, 13.5) } }
17) { A: 17, B: { X: 1, Y: (1, 0.5) } }
18) { A: 18, B: { X: 4, Y: (16, 32) } }
19) { A: 19, B: { X: 2, Y: (4, <null>) } }
###
> KeyJoin(b:TB, a:TA, B, Key, b+>{Id})
KeyJoin(b : TB, a : TA, B, Key, b+>{ Id }) : {A:i8, B:{X:i8, Y:(i8, r8?)}, Id:i8}*
BndKind:Call, Type:{A:i8, B:{X:i8, Y:(i8, r8?)}, Id:i8}*, Bnd:(Call(∂.KeyJoin([map:1] Global(TB), [map:2] Global(TA), GetField(Scope(1), B), GetField(Scope(2), Key), SetFields([with:3] Scope(1), Id : GetField(Scope(2), Id)))))
// (<ctx>, ∂.TB:{A:i8, B:{X:i8, Y:(i8, r8?)}}*, ∂.TA:{Id:i8, Key:{X:i8, Y:(i8, r8?)}}*) : {A:i8, B:{X:i8, Y:(i8, r8?)}, Id:i8}*
KeyJoin_2(Arr<obj>, {i8,{i8,(i8,Opt<r8>)}}):{i8,(i8,Opt<r8>)}
      1) ldarg.1 [{i8,{i8,(i8,Opt<r8>)}}]
      5) ldfld {i8,{i8,(i8,Opt<r8>)}}::_F1:{i8,(i8,Opt<r8>)}
      1) ret
  Total Size: 7

KeyJoin_3(Arr<obj>, {i8,{i8,(i8,Opt<r8>)}}):{i8,(i8,Opt<r8>)}
      1) ldarg.1 [{i8,{i8,(i8,Opt<r8>)}}]
      5) ldfld {i8,{i8,(i8,Opt<r8>)}}::_F1:{i8,(i8,Opt<r8>)}
      1) ret
  Total Size: 7

KeyJoin_4(Arr<obj>, {i8,{i8,(i8,Opt<r8>)}}, {i8,{i8,(i8,Opt<r8>)}}):{i8,{i8,(i8,Opt<r8>)},i8}
      5) newobj {i8,{i8,(i8,Opt<r8>)},i8}()
      1) dup
      1) ldc.i4.5
      5) stfld {i8,{i8,(i8,Opt<r8>)},i8}::_B0:u1
      1) stloc.0 [{i8,{i8,(i8,Opt<r8>)},i8}]
      1) ldloc.0 [{i8,{i8,(i8,Opt<r8>)},i8}]
      1) ldarg.2 [{i8,{i8,(i8,Opt<r8>)}}]
      5) ldfld {i8,{i8,(i8,Opt<r8>)}}::_F0:i8
      5) stfld {i8,{i8,(i8,Opt<r8>)},i8}::_F2:i8
      1) ldloc.0 [{i8,{i8,(i8,Opt<r8>)},i8}]
      1) ldarg.1 [{i8,{i8,(i8,Opt<r8>)}}]
      5) ldfld {i8,{i8,(i8,Opt<r8>)}}::_F0:i8
      5) stfld {i8,{i8,(i8,Opt<r8>)},i8}::_F0:i8
      1) ldarg.1 [{i8,{i8,(i8,Opt<r8>)}}]
      5) ldfld {i8,{i8,(i8,Opt<r8>)}}::_F1:{i8,(i8,Opt<r8>)}
      5) brfalse [0]
      1) ldloc.0 [{i8,{i8,(i8,Opt<r8>)},i8}]
      1) dup
      1) dup
      5) ldfld {i8,{i8,(i8,Opt<r8>)},i8}::_B0:u1
      1) ldc.i4.2
      1) or
      5) stfld {i8,{i8,(i8,Opt<r8>)},i8}::_B0:u1
      1) ldarg.1 [{i8,{i8,(i8,Opt<r8>)}}]
      5) ldfld {i8,{i8,(i8,Opt<r8>)}}::_F1:{i8,(i8,Opt<r8>)}
      5) stfld {i8,{i8,(i8,Opt<r8>)},i8}::_F1:{i8,(i8,Opt<r8>)}
  Label [0]:
      1) ldloc.0 [{i8,{i8,(i8,Opt<r8>)},i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 89

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):ExecCtx
      1) stloc.0 [ExecCtx]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,{i8,(i8,Opt<r8>)}}>
      1) stloc.1 [Seq<{i8,{i8,(i8,Opt<r8>)}}>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.2
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,{i8,(i8,Opt<r8>)}}>
      1) stloc.2 [Seq<{i8,{i8,(i8,Opt<r8>)}}>]
      1) ldloc.1 [Seq<{i8,{i8,(i8,Opt<r8>)}}>]
      1) ldloc.2 [Seq<{i8,{i8,(i8,Opt<r8>)}}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<{i8,{i8,(i8,Opt<r8>)}},{i8,(i8,Opt<r8>)}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [Func<{i8,{i8,(i8,Opt<r8>)}},{i8,(i8,Opt<r8>)}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Func<{i8,{i8,(i8,Opt<r8>)}},{i8,{i8,(i8,Opt<r8>)}},{i8,{i8,(i8,Opt<r8>)},i8}>]
      1) ldnull
      1) ldnull
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.3
      5) ldelem [EqualityComparer<{i8,(i8,Opt<r8>)}>]
      1) ldc.i4.1
      1) ldloc.0 [ExecCtx]
      1) ldc.i4.0
      5) call static KeyJoinGen::Exec(Seq<{i8,{i8,(i8,Opt<r8>)}}>, Seq<{i8,{i8,(i8,Opt<r8>)}}>, Func<{i8,{i8,(i8,Opt<r8>)}},{i8,(i8,Opt<r8>)}>, Func<{i8,{i8,(i8,Opt<r8>)}},{i8,(i8,Opt<r8>)}>, Func<{i8,{i8,(i8,Opt<r8>)}},{i8,{i8,(i8,Opt<r8>)}},{i8,{i8,(i8,Opt<r8>)},i8}>, Func<{i8,{i8,(i8,Opt<r8>)}},{i8,{i8,(i8,Opt<r8>)},i8}>, Func<{i8,{i8,(i8,Opt<r8>)}},{i8,{i8,(i8,Opt<r8>)},i8}>, EqualityComparer<{i8,(i8,Opt<r8>)}>, bool, ExecCtx, i4):Seq<{i8,{i8,(i8,Opt<r8>)},i8}>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<{i8,{i8,(i8,Opt<r8>)},i8}>):Seq<{i8,{i8,(i8,Opt<r8>)},i8}>
      1) ret
  Total Size: 73

Func sig: (<ctx>:x, TB:{A:i8, B:{X:i8, Y:(i8, r8?)}}*, TA:{Id:i8, Key:{X:i8, Y:(i8, r8?)}}*) to {A:i8, B:{X:i8, Y:(i8, r8?)}, Id:i8}*
Sequence: Seq<{i8,{i8,(i8,Opt<r8>)},i8}>
 0) { A: 0, B: { X: 0, Y: (0, 0) }, Id: 0 }
 1) { A: 1, B: { X: 3, Y: (9, 13.5) }, Id: 3 }
 2) { A: 2, B: { X: 1, Y: (1, 0.5) }, Id: 1 }
 3) { A: 3, B: { X: 4, Y: (16, 32) }, Id: 4 }
 4) { A: 5, B: { X: 0, Y: (0, 0) }, Id: 0 }
 5) { A: 6, B: { X: 3, Y: (9, 13.5) }, Id: 3 }
 6) { A: 7, B: { X: 1, Y: (1, 0.5) }, Id: 1 }
 7) { A: 8, B: { X: 4, Y: (16, 32) }, Id: 4 }
 8) { A: 10, B: { X: 0, Y: (0, 0) }, Id: 0 }
 9) { A: 11, B: { X: 3, Y: (9, 13.5) }, Id: 3 }
10) { A: 12, B: { X: 1, Y: (1, 0.5) }, Id: 1 }
11) { A: 13, B: { X: 4, Y: (16, 32) }, Id: 4 }
12) { A: 15, B: { X: 0, Y: (0, 0) }, Id: 0 }
13) { A: 16, B: { X: 3, Y: (9, 13.5) }, Id: 3 }
14) { A: 17, B: { X: 1, Y: (1, 0.5) }, Id: 1 }
15) { A: 18, B: { X: 4, Y: (16, 32) }, Id: 4 }
*** Ctx ping count: 8
    [0:3](8=4+0+4): KeyJoin(*1: TB, *2: TA, *1.B, *2.Key, SetFields(!3: *1, Id : *2.Id))
###

**** New definitions: TA, type: {Id:i8, Key:{X:i8, Y:(i8, r8)}}*
**** New definitions: TB, type: {A:i8, B:{X:i8, Y:(i8, r8)}}*

> TA
TA : {Id:i8, Key:{X:i8, Y:(i8, r8)}}*
BndKind:Global, Type:{Id:i8, Key:{X:i8, Y:(i8, r8)}}*, Bnd:(Global(TA))
// (∂.TA:{Id:i8, Key:{X:i8, Y:(i8, r8)}}*) : {Id:i8, Key:{X:i8, Y:(i8, r8)}}*
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,{i8,(i8,r8)}}>
      1) stloc.0 [Seq<{i8,{i8,(i8,r8)}}>]
      1) ldloc.0 [Seq<{i8,{i8,(i8,r8)}}>]
      1) ret
  Total Size: 11

Func sig: (TA:{Id:i8, Key:{X:i8, Y:(i8, r8)}}*) to {Id:i8, Key:{X:i8, Y:(i8, r8)}}*
Sequence: Seq<{i8,{i8,(i8,r8)}}>
 0) { Id: 0, Key: { X: 0, Y: (0, 0) } }
 1) { Id: 1, Key: { X: 1, Y: (1, 0.5) } }
 2) { Id: 2, Key: { X: 2, Y: (4, NaN) } }
 3) { Id: 3, Key: { X: 3, Y: (9, 13.5) } }
 4) { Id: 4, Key: { X: 4, Y: (16, 32) } }
###
> TB
TB : {A:i8, B:{X:i8, Y:(i8, r8)}}*
BndKind:Global, Type:{A:i8, B:{X:i8, Y:(i8, r8)}}*, Bnd:(Global(TB))
// (∂.TB:{A:i8, B:{X:i8, Y:(i8, r8)}}*) : {A:i8, B:{X:i8, Y:(i8, r8)}}*
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,{i8,(i8,r8)}}>
      1) stloc.0 [Seq<{i8,{i8,(i8,r8)}}>]
      1) ldloc.0 [Seq<{i8,{i8,(i8,r8)}}>]
      1) ret
  Total Size: 11

Func sig: (TB:{A:i8, B:{X:i8, Y:(i8, r8)}}*) to {A:i8, B:{X:i8, Y:(i8, r8)}}*
Sequence: Seq<{i8,{i8,(i8,r8)}}>
 0) { A: 0, B: { X: 0, Y: (0, 0) } }
 1) { A: 1, B: { X: 3, Y: (9, 13.5) } }
 2) { A: 2, B: { X: 1, Y: (1, 0.5) } }
 3) { A: 3, B: { X: 4, Y: (16, 32) } }
 4) { A: 4, B: { X: 2, Y: (4, NaN) } }
 5) { A: 5, B: { X: 0, Y: (0, 0) } }
 6) { A: 6, B: { X: 3, Y: (9, 13.5) } }
 7) { A: 7, B: { X: 1, Y: (1, 0.5) } }
 8) { A: 8, B: { X: 4, Y: (16, 32) } }
 9) { A: 9, B: { X: 2, Y: (4, NaN) } }
10) { A: 10, B: { X: 0, Y: (0, 0) } }
11) { A: 11, B: { X: 3, Y: (9, 13.5) } }
12) { A: 12, B: { X: 1, Y: (1, 0.5) } }
13) { A: 13, B: { X: 4, Y: (16, 32) } }
14) { A: 14, B: { X: 2, Y: (4, NaN) } }
15) { A: 15, B: { X: 0, Y: (0, 0) } }
16) { A: 16, B: { X: 3, Y: (9, 13.5) } }
17) { A: 17, B: { X: 1, Y: (1, 0.5) } }
18) { A: 18, B: { X: 4, Y: (16, 32) } }
19) { A: 19, B: { X: 2, Y: (4, NaN) } }
###
> KeyJoin(b:TB, a:TA, B, Key, b+>{Id})
KeyJoin(b : TB, a : TA, B, Key, b+>{ Id }) : {A:i8, B:{X:i8, Y:(i8, r8)}, Id:i8}*
BndKind:Call, Type:{A:i8, B:{X:i8, Y:(i8, r8)}, Id:i8}*, Bnd:(Call(∂.KeyJoin([map:1] Global(TB), [map:2] Global(TA), GetField(Scope(1), B), GetField(Scope(2), Key), SetFields([with:3] Scope(1), Id : GetField(Scope(2), Id)))))
// (<ctx>, ∂.TB:{A:i8, B:{X:i8, Y:(i8, r8)}}*, ∂.TA:{Id:i8, Key:{X:i8, Y:(i8, r8)}}*) : {A:i8, B:{X:i8, Y:(i8, r8)}, Id:i8}*
KeyJoin_2(Arr<obj>, {i8,{i8,(i8,r8)}}):{i8,(i8,r8)}
      1) ldarg.1 [{i8,{i8,(i8,r8)}}]
      5) ldfld {i8,{i8,(i8,r8)}}::_F1:{i8,(i8,r8)}
      1) ret
  Total Size: 7

KeyJoin_3(Arr<obj>, {i8,{i8,(i8,r8)}}):{i8,(i8,r8)}
      1) ldarg.1 [{i8,{i8,(i8,r8)}}]
      5) ldfld {i8,{i8,(i8,r8)}}::_F1:{i8,(i8,r8)}
      1) ret
  Total Size: 7

KeyJoin_4(Arr<obj>, {i8,{i8,(i8,r8)}}, {i8,{i8,(i8,r8)}}):{i8,{i8,(i8,r8)},i8}
      5) newobj {i8,{i8,(i8,r8)},i8}()
      1) dup
      1) ldc.i4.5
      5) stfld {i8,{i8,(i8,r8)},i8}::_B0:u1
      1) stloc.0 [{i8,{i8,(i8,r8)},i8}]
      1) ldloc.0 [{i8,{i8,(i8,r8)},i8}]
      1) ldarg.2 [{i8,{i8,(i8,r8)}}]
      5) ldfld {i8,{i8,(i8,r8)}}::_F0:i8
      5) stfld {i8,{i8,(i8,r8)},i8}::_F2:i8
      1) ldloc.0 [{i8,{i8,(i8,r8)},i8}]
      1) ldarg.1 [{i8,{i8,(i8,r8)}}]
      5) ldfld {i8,{i8,(i8,r8)}}::_F0:i8
      5) stfld {i8,{i8,(i8,r8)},i8}::_F0:i8
      1) ldarg.1 [{i8,{i8,(i8,r8)}}]
      5) ldfld {i8,{i8,(i8,r8)}}::_F1:{i8,(i8,r8)}
      5) brfalse [0]
      1) ldloc.0 [{i8,{i8,(i8,r8)},i8}]
      1) dup
      1) dup
      5) ldfld {i8,{i8,(i8,r8)},i8}::_B0:u1
      1) ldc.i4.2
      1) or
      5) stfld {i8,{i8,(i8,r8)},i8}::_B0:u1
      1) ldarg.1 [{i8,{i8,(i8,r8)}}]
      5) ldfld {i8,{i8,(i8,r8)}}::_F1:{i8,(i8,r8)}
      5) stfld {i8,{i8,(i8,r8)},i8}::_F1:{i8,(i8,r8)}
  Label [0]:
      1) ldloc.0 [{i8,{i8,(i8,r8)},i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 89

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):ExecCtx
      1) stloc.0 [ExecCtx]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,{i8,(i8,r8)}}>
      1) stloc.1 [Seq<{i8,{i8,(i8,r8)}}>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.2
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,{i8,(i8,r8)}}>
      1) stloc.2 [Seq<{i8,{i8,(i8,r8)}}>]
      1) ldloc.1 [Seq<{i8,{i8,(i8,r8)}}>]
      1) ldloc.2 [Seq<{i8,{i8,(i8,r8)}}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<{i8,{i8,(i8,r8)}},{i8,(i8,r8)}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [Func<{i8,{i8,(i8,r8)}},{i8,(i8,r8)}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Func<{i8,{i8,(i8,r8)}},{i8,{i8,(i8,r8)}},{i8,{i8,(i8,r8)},i8}>]
      1) ldnull
      1) ldnull
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.3
      5) ldelem [EqualityComparer<{i8,(i8,r8)}>]
      1) ldc.i4.1
      1) ldloc.0 [ExecCtx]
      1) ldc.i4.0
      5) call static KeyJoinGen::Exec(Seq<{i8,{i8,(i8,r8)}}>, Seq<{i8,{i8,(i8,r8)}}>, Func<{i8,{i8,(i8,r8)}},{i8,(i8,r8)}>, Func<{i8,{i8,(i8,r8)}},{i8,(i8,r8)}>, Func<{i8,{i8,(i8,r8)}},{i8,{i8,(i8,r8)}},{i8,{i8,(i8,r8)},i8}>, Func<{i8,{i8,(i8,r8)}},{i8,{i8,(i8,r8)},i8}>, Func<{i8,{i8,(i8,r8)}},{i8,{i8,(i8,r8)},i8}>, EqualityComparer<{i8,(i8,r8)}>, bool, ExecCtx, i4):Seq<{i8,{i8,(i8,r8)},i8}>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<{i8,{i8,(i8,r8)},i8}>):Seq<{i8,{i8,(i8,r8)},i8}>
      1) ret
  Total Size: 73

Func sig: (<ctx>:x, TB:{A:i8, B:{X:i8, Y:(i8, r8)}}*, TA:{Id:i8, Key:{X:i8, Y:(i8, r8)}}*) to {A:i8, B:{X:i8, Y:(i8, r8)}, Id:i8}*
Sequence: Seq<{i8,{i8,(i8,r8)},i8}>
 0) { A: 0, B: { X: 0, Y: (0, 0) }, Id: 0 }
 1) { A: 1, B: { X: 3, Y: (9, 13.5) }, Id: 3 }
 2) { A: 2, B: { X: 1, Y: (1, 0.5) }, Id: 1 }
 3) { A: 3, B: { X: 4, Y: (16, 32) }, Id: 4 }
 4) { A: 5, B: { X: 0, Y: (0, 0) }, Id: 0 }
 5) { A: 6, B: { X: 3, Y: (9, 13.5) }, Id: 3 }
 6) { A: 7, B: { X: 1, Y: (1, 0.5) }, Id: 1 }
 7) { A: 8, B: { X: 4, Y: (16, 32) }, Id: 4 }
 8) { A: 10, B: { X: 0, Y: (0, 0) }, Id: 0 }
 9) { A: 11, B: { X: 3, Y: (9, 13.5) }, Id: 3 }
10) { A: 12, B: { X: 1, Y: (1, 0.5) }, Id: 1 }
11) { A: 13, B: { X: 4, Y: (16, 32) }, Id: 4 }
12) { A: 15, B: { X: 0, Y: (0, 0) }, Id: 0 }
13) { A: 16, B: { X: 3, Y: (9, 13.5) }, Id: 3 }
14) { A: 17, B: { X: 1, Y: (1, 0.5) }, Id: 1 }
15) { A: 18, B: { X: 4, Y: (16, 32) }, Id: 4 }
*** Ctx ping count: 8
    [0:3](8=4+0+4): KeyJoin(*1: TB, *2: TA, *1.B, *2.Key, SetFields(!3: *1, Id : *2.Id))
###

**** New definitions: TA, type: {Id:i8, Key:{X:i8, Y:{U:i8, V:r8}?}}*
**** New definitions: TB, type: {A:i8, B:{X:i8, Y:{U:i8, V:r8}?}}*

> TA
TA : {Id:i8, Key:{X:i8, Y:{U:i8, V:r8}?}}*
BndKind:Global, Type:{Id:i8, Key:{X:i8, Y:{U:i8, V:r8}?}}*, Bnd:(Global(TA))
// (∂.TA:{Id:i8, Key:{X:i8, Y:{U:i8, V:r8}?}}*) : {Id:i8, Key:{X:i8, Y:{U:i8, V:r8}?}}*
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,{i8,{i8,r8}}}>
      1) stloc.0 [Seq<{i8,{i8,{i8,r8}}}>]
      1) ldloc.0 [Seq<{i8,{i8,{i8,r8}}}>]
      1) ret
  Total Size: 11

Func sig: (TA:{Id:i8, Key:{X:i8, Y:{U:i8, V:r8}?}}*) to {Id:i8, Key:{X:i8, Y:{U:i8, V:r8}?}}*
Sequence: Seq<{i8,{i8,{i8,r8}}}>
 0) { Id: 0, Key: { X: 0, Y: { U: 0, V: 0 } } }
 1) { Id: 1, Key: { X: 1, Y: { U: 1, V: 0.5 } } }
 2) { Id: 2, Key: { X: 2, Y: <null> } }
 3) { Id: 3, Key: { X: 3, Y: { U: 9, V: 13.5 } } }
 4) { Id: 4, Key: { X: 4, Y: { U: 16, V: 32 } } }
###
> TB
TB : {A:i8, B:{X:i8, Y:{U:i8, V:r8}?}}*
BndKind:Global, Type:{A:i8, B:{X:i8, Y:{U:i8, V:r8}?}}*, Bnd:(Global(TB))
// (∂.TB:{A:i8, B:{X:i8, Y:{U:i8, V:r8}?}}*) : {A:i8, B:{X:i8, Y:{U:i8, V:r8}?}}*
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,{i8,{i8,r8}}}>
      1) stloc.0 [Seq<{i8,{i8,{i8,r8}}}>]
      1) ldloc.0 [Seq<{i8,{i8,{i8,r8}}}>]
      1) ret
  Total Size: 11

Func sig: (TB:{A:i8, B:{X:i8, Y:{U:i8, V:r8}?}}*) to {A:i8, B:{X:i8, Y:{U:i8, V:r8}?}}*
Sequence: Seq<{i8,{i8,{i8,r8}}}>
 0) { A: 0, B: { X: 0, Y: { U: 0, V: 0 } } }
 1) { A: 1, B: { X: 3, Y: { U: 9, V: 13.5 } } }
 2) { A: 2, B: { X: 1, Y: { U: 1, V: 0.5 } } }
 3) { A: 3, B: { X: 4, Y: { U: 16, V: 32 } } }
 4) { A: 4, B: { X: 2, Y: <null> } }
 5) { A: 5, B: { X: 0, Y: { U: 0, V: 0 } } }
 6) { A: 6, B: { X: 3, Y: { U: 9, V: 13.5 } } }
 7) { A: 7, B: { X: 1, Y: { U: 1, V: 0.5 } } }
 8) { A: 8, B: { X: 4, Y: { U: 16, V: 32 } } }
 9) { A: 9, B: { X: 2, Y: <null> } }
10) { A: 10, B: { X: 0, Y: { U: 0, V: 0 } } }
11) { A: 11, B: { X: 3, Y: { U: 9, V: 13.5 } } }
12) { A: 12, B: { X: 1, Y: { U: 1, V: 0.5 } } }
13) { A: 13, B: { X: 4, Y: { U: 16, V: 32 } } }
14) { A: 14, B: { X: 2, Y: <null> } }
15) { A: 15, B: { X: 0, Y: { U: 0, V: 0 } } }
16) { A: 16, B: { X: 3, Y: { U: 9, V: 13.5 } } }
17) { A: 17, B: { X: 1, Y: { U: 1, V: 0.5 } } }
18) { A: 18, B: { X: 4, Y: { U: 16, V: 32 } } }
19) { A: 19, B: { X: 2, Y: <null> } }
###
> KeyJoin(b:TB, a:TA, B, Key, b+>{Id})
KeyJoin(b : TB, a : TA, B, Key, b+>{ Id }) : {A:i8, B:{X:i8, Y:{U:i8, V:r8}?}, Id:i8}*
BndKind:Call, Type:{A:i8, B:{X:i8, Y:{U:i8, V:r8}?}, Id:i8}*, Bnd:(Call(∂.KeyJoin([map:1] Global(TB), [map:2] Global(TA), GetField(Scope(1), B), GetField(Scope(2), Key), SetFields([with:3] Scope(1), Id : GetField(Scope(2), Id)))))
// (<ctx>, ∂.TB:{A:i8, B:{X:i8, Y:{U:i8, V:r8}?}}*, ∂.TA:{Id:i8, Key:{X:i8, Y:{U:i8, V:r8}?}}*) : {A:i8, B:{X:i8, Y:{U:i8, V:r8}?}, Id:i8}*
KeyJoin_2(Arr<obj>, {i8,{i8,{i8,r8}}}):{i8,{i8,r8}}
      1) ldarg.1 [{i8,{i8,{i8,r8}}}]
      5) ldfld {i8,{i8,{i8,r8}}}::_F1:{i8,{i8,r8}}
      1) ret
  Total Size: 7

KeyJoin_3(Arr<obj>, {i8,{i8,{i8,r8}}}):{i8,{i8,r8}}
      1) ldarg.1 [{i8,{i8,{i8,r8}}}]
      5) ldfld {i8,{i8,{i8,r8}}}::_F1:{i8,{i8,r8}}
      1) ret
  Total Size: 7

KeyJoin_4(Arr<obj>, {i8,{i8,{i8,r8}}}, {i8,{i8,{i8,r8}}}):{i8,{i8,{i8,r8}},i8}
      5) newobj {i8,{i8,{i8,r8}},i8}()
      1) dup
      1) ldc.i4.5
      5) stfld {i8,{i8,{i8,r8}},i8}::_B0:u1
      1) stloc.0 [{i8,{i8,{i8,r8}},i8}]
      1) ldloc.0 [{i8,{i8,{i8,r8}},i8}]
      1) ldarg.2 [{i8,{i8,{i8,r8}}}]
      5) ldfld {i8,{i8,{i8,r8}}}::_F0:i8
      5) stfld {i8,{i8,{i8,r8}},i8}::_F2:i8
      1) ldloc.0 [{i8,{i8,{i8,r8}},i8}]
      1) ldarg.1 [{i8,{i8,{i8,r8}}}]
      5) ldfld {i8,{i8,{i8,r8}}}::_F0:i8
      5) stfld {i8,{i8,{i8,r8}},i8}::_F0:i8
      1) ldarg.1 [{i8,{i8,{i8,r8}}}]
      5) ldfld {i8,{i8,{i8,r8}}}::_F1:{i8,{i8,r8}}
      5) brfalse [0]
      1) ldloc.0 [{i8,{i8,{i8,r8}},i8}]
      1) dup
      1) dup
      5) ldfld {i8,{i8,{i8,r8}},i8}::_B0:u1
      1) ldc.i4.2
      1) or
      5) stfld {i8,{i8,{i8,r8}},i8}::_B0:u1
      1) ldarg.1 [{i8,{i8,{i8,r8}}}]
      5) ldfld {i8,{i8,{i8,r8}}}::_F1:{i8,{i8,r8}}
      5) stfld {i8,{i8,{i8,r8}},i8}::_F1:{i8,{i8,r8}}
  Label [0]:
      1) ldloc.0 [{i8,{i8,{i8,r8}},i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 89

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):ExecCtx
      1) stloc.0 [ExecCtx]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,{i8,{i8,r8}}}>
      1) stloc.1 [Seq<{i8,{i8,{i8,r8}}}>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.2
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,{i8,{i8,r8}}}>
      1) stloc.2 [Seq<{i8,{i8,{i8,r8}}}>]
      1) ldloc.1 [Seq<{i8,{i8,{i8,r8}}}>]
      1) ldloc.2 [Seq<{i8,{i8,{i8,r8}}}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<{i8,{i8,{i8,r8}}},{i8,{i8,r8}}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [Func<{i8,{i8,{i8,r8}}},{i8,{i8,r8}}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Func<{i8,{i8,{i8,r8}}},{i8,{i8,{i8,r8}}},{i8,{i8,{i8,r8}},i8}>]
      1) ldnull
      1) ldnull
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.3
      5) ldelem [EqualityComparer<{i8,{i8,r8}}>]
      1) ldc.i4.1
      1) ldloc.0 [ExecCtx]
      1) ldc.i4.0
      5) call static KeyJoinGen::Exec(Seq<{i8,{i8,{i8,r8}}}>, Seq<{i8,{i8,{i8,r8}}}>, Func<{i8,{i8,{i8,r8}}},{i8,{i8,r8}}>, Func<{i8,{i8,{i8,r8}}},{i8,{i8,r8}}>, Func<{i8,{i8,{i8,r8}}},{i8,{i8,{i8,r8}}},{i8,{i8,{i8,r8}},i8}>, Func<{i8,{i8,{i8,r8}}},{i8,{i8,{i8,r8}},i8}>, Func<{i8,{i8,{i8,r8}}},{i8,{i8,{i8,r8}},i8}>, EqualityComparer<{i8,{i8,r8}}>, bool, ExecCtx, i4):Seq<{i8,{i8,{i8,r8}},i8}>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<{i8,{i8,{i8,r8}},i8}>):Seq<{i8,{i8,{i8,r8}},i8}>
      1) ret
  Total Size: 73

Func sig: (<ctx>:x, TB:{A:i8, B:{X:i8, Y:{U:i8, V:r8}?}}*, TA:{Id:i8, Key:{X:i8, Y:{U:i8, V:r8}?}}*) to {A:i8, B:{X:i8, Y:{U:i8, V:r8}?}, Id:i8}*
Sequence: Seq<{i8,{i8,{i8,r8}},i8}>
 0) { A: 0, B: { X: 0, Y: { U: 0, V: 0 } }, Id: 0 }
 1) { A: 1, B: { X: 3, Y: { U: 9, V: 13.5 } }, Id: 3 }
 2) { A: 2, B: { X: 1, Y: { U: 1, V: 0.5 } }, Id: 1 }
 3) { A: 3, B: { X: 4, Y: { U: 16, V: 32 } }, Id: 4 }
 4) { A: 5, B: { X: 0, Y: { U: 0, V: 0 } }, Id: 0 }
 5) { A: 6, B: { X: 3, Y: { U: 9, V: 13.5 } }, Id: 3 }
 6) { A: 7, B: { X: 1, Y: { U: 1, V: 0.5 } }, Id: 1 }
 7) { A: 8, B: { X: 4, Y: { U: 16, V: 32 } }, Id: 4 }
 8) { A: 10, B: { X: 0, Y: { U: 0, V: 0 } }, Id: 0 }
 9) { A: 11, B: { X: 3, Y: { U: 9, V: 13.5 } }, Id: 3 }
10) { A: 12, B: { X: 1, Y: { U: 1, V: 0.5 } }, Id: 1 }
11) { A: 13, B: { X: 4, Y: { U: 16, V: 32 } }, Id: 4 }
12) { A: 15, B: { X: 0, Y: { U: 0, V: 0 } }, Id: 0 }
13) { A: 16, B: { X: 3, Y: { U: 9, V: 13.5 } }, Id: 3 }
14) { A: 17, B: { X: 1, Y: { U: 1, V: 0.5 } }, Id: 1 }
15) { A: 18, B: { X: 4, Y: { U: 16, V: 32 } }, Id: 4 }
*** Ctx ping count: 8
    [0:3](8=4+0+4): KeyJoin(*1: TB, *2: TA, *1.B, *2.Key, SetFields(!3: *1, Id : *2.Id))
###

**** New definitions: TA, type: {Id:i8, Key:{X:i8, Y:(i8, r8)?}}*
**** New definitions: TB, type: {A:i8, B:{X:i8, Y:(i8, r8)?}}*

> TA
TA : {Id:i8, Key:{X:i8, Y:(i8, r8)?}}*
BndKind:Global, Type:{Id:i8, Key:{X:i8, Y:(i8, r8)?}}*, Bnd:(Global(TA))
// (∂.TA:{Id:i8, Key:{X:i8, Y:(i8, r8)?}}*) : {Id:i8, Key:{X:i8, Y:(i8, r8)?}}*
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,{i8,(i8,r8)}}>
      1) stloc.0 [Seq<{i8,{i8,(i8,r8)}}>]
      1) ldloc.0 [Seq<{i8,{i8,(i8,r8)}}>]
      1) ret
  Total Size: 11

Func sig: (TA:{Id:i8, Key:{X:i8, Y:(i8, r8)?}}*) to {Id:i8, Key:{X:i8, Y:(i8, r8)?}}*
Sequence: Seq<{i8,{i8,(i8,r8)}}>
 0) { Id: 0, Key: { X: 0, Y: (0, 0) } }
 1) { Id: 1, Key: { X: 1, Y: (1, 0.5) } }
 2) { Id: 2, Key: { X: 2, Y: <null> } }
 3) { Id: 3, Key: { X: 3, Y: (9, 13.5) } }
 4) { Id: 4, Key: { X: 4, Y: (16, 32) } }
###
> TB
TB : {A:i8, B:{X:i8, Y:(i8, r8)?}}*
BndKind:Global, Type:{A:i8, B:{X:i8, Y:(i8, r8)?}}*, Bnd:(Global(TB))
// (∂.TB:{A:i8, B:{X:i8, Y:(i8, r8)?}}*) : {A:i8, B:{X:i8, Y:(i8, r8)?}}*
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,{i8,(i8,r8)}}>
      1) stloc.0 [Seq<{i8,{i8,(i8,r8)}}>]
      1) ldloc.0 [Seq<{i8,{i8,(i8,r8)}}>]
      1) ret
  Total Size: 11

Func sig: (TB:{A:i8, B:{X:i8, Y:(i8, r8)?}}*) to {A:i8, B:{X:i8, Y:(i8, r8)?}}*
Sequence: Seq<{i8,{i8,(i8,r8)}}>
 0) { A: 0, B: { X: 0, Y: (0, 0) } }
 1) { A: 1, B: { X: 3, Y: (9, 13.5) } }
 2) { A: 2, B: { X: 1, Y: (1, 0.5) } }
 3) { A: 3, B: { X: 4, Y: (16, 32) } }
 4) { A: 4, B: { X: 2, Y: <null> } }
 5) { A: 5, B: { X: 0, Y: (0, 0) } }
 6) { A: 6, B: { X: 3, Y: (9, 13.5) } }
 7) { A: 7, B: { X: 1, Y: (1, 0.5) } }
 8) { A: 8, B: { X: 4, Y: (16, 32) } }
 9) { A: 9, B: { X: 2, Y: <null> } }
10) { A: 10, B: { X: 0, Y: (0, 0) } }
11) { A: 11, B: { X: 3, Y: (9, 13.5) } }
12) { A: 12, B: { X: 1, Y: (1, 0.5) } }
13) { A: 13, B: { X: 4, Y: (16, 32) } }
14) { A: 14, B: { X: 2, Y: <null> } }
15) { A: 15, B: { X: 0, Y: (0, 0) } }
16) { A: 16, B: { X: 3, Y: (9, 13.5) } }
17) { A: 17, B: { X: 1, Y: (1, 0.5) } }
18) { A: 18, B: { X: 4, Y: (16, 32) } }
19) { A: 19, B: { X: 2, Y: <null> } }
###
> KeyJoin(b:TB, a:TA, B, Key, b+>{Id})
KeyJoin(b : TB, a : TA, B, Key, b+>{ Id }) : {A:i8, B:{X:i8, Y:(i8, r8)?}, Id:i8}*
BndKind:Call, Type:{A:i8, B:{X:i8, Y:(i8, r8)?}, Id:i8}*, Bnd:(Call(∂.KeyJoin([map:1] Global(TB), [map:2] Global(TA), GetField(Scope(1), B), GetField(Scope(2), Key), SetFields([with:3] Scope(1), Id : GetField(Scope(2), Id)))))
// (<ctx>, ∂.TB:{A:i8, B:{X:i8, Y:(i8, r8)?}}*, ∂.TA:{Id:i8, Key:{X:i8, Y:(i8, r8)?}}*) : {A:i8, B:{X:i8, Y:(i8, r8)?}, Id:i8}*
KeyJoin_2(Arr<obj>, {i8,{i8,(i8,r8)}}):{i8,(i8,r8)}
      1) ldarg.1 [{i8,{i8,(i8,r8)}}]
      5) ldfld {i8,{i8,(i8,r8)}}::_F1:{i8,(i8,r8)}
      1) ret
  Total Size: 7

KeyJoin_3(Arr<obj>, {i8,{i8,(i8,r8)}}):{i8,(i8,r8)}
      1) ldarg.1 [{i8,{i8,(i8,r8)}}]
      5) ldfld {i8,{i8,(i8,r8)}}::_F1:{i8,(i8,r8)}
      1) ret
  Total Size: 7

KeyJoin_4(Arr<obj>, {i8,{i8,(i8,r8)}}, {i8,{i8,(i8,r8)}}):{i8,{i8,(i8,r8)},i8}
      5) newobj {i8,{i8,(i8,r8)},i8}()
      1) dup
      1) ldc.i4.5
      5) stfld {i8,{i8,(i8,r8)},i8}::_B0:u1
      1) stloc.0 [{i8,{i8,(i8,r8)},i8}]
      1) ldloc.0 [{i8,{i8,(i8,r8)},i8}]
      1) ldarg.2 [{i8,{i8,(i8,r8)}}]
      5) ldfld {i8,{i8,(i8,r8)}}::_F0:i8
      5) stfld {i8,{i8,(i8,r8)},i8}::_F2:i8
      1) ldloc.0 [{i8,{i8,(i8,r8)},i8}]
      1) ldarg.1 [{i8,{i8,(i8,r8)}}]
      5) ldfld {i8,{i8,(i8,r8)}}::_F0:i8
      5) stfld {i8,{i8,(i8,r8)},i8}::_F0:i8
      1) ldarg.1 [{i8,{i8,(i8,r8)}}]
      5) ldfld {i8,{i8,(i8,r8)}}::_F1:{i8,(i8,r8)}
      5) brfalse [0]
      1) ldloc.0 [{i8,{i8,(i8,r8)},i8}]
      1) dup
      1) dup
      5) ldfld {i8,{i8,(i8,r8)},i8}::_B0:u1
      1) ldc.i4.2
      1) or
      5) stfld {i8,{i8,(i8,r8)},i8}::_B0:u1
      1) ldarg.1 [{i8,{i8,(i8,r8)}}]
      5) ldfld {i8,{i8,(i8,r8)}}::_F1:{i8,(i8,r8)}
      5) stfld {i8,{i8,(i8,r8)},i8}::_F1:{i8,(i8,r8)}
  Label [0]:
      1) ldloc.0 [{i8,{i8,(i8,r8)},i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 89

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):ExecCtx
      1) stloc.0 [ExecCtx]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,{i8,(i8,r8)}}>
      1) stloc.1 [Seq<{i8,{i8,(i8,r8)}}>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.2
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,{i8,(i8,r8)}}>
      1) stloc.2 [Seq<{i8,{i8,(i8,r8)}}>]
      1) ldloc.1 [Seq<{i8,{i8,(i8,r8)}}>]
      1) ldloc.2 [Seq<{i8,{i8,(i8,r8)}}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<{i8,{i8,(i8,r8)}},{i8,(i8,r8)}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [Func<{i8,{i8,(i8,r8)}},{i8,(i8,r8)}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Func<{i8,{i8,(i8,r8)}},{i8,{i8,(i8,r8)}},{i8,{i8,(i8,r8)},i8}>]
      1) ldnull
      1) ldnull
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.3
      5) ldelem [EqualityComparer<{i8,(i8,r8)}>]
      1) ldc.i4.1
      1) ldloc.0 [ExecCtx]
      1) ldc.i4.0
      5) call static KeyJoinGen::Exec(Seq<{i8,{i8,(i8,r8)}}>, Seq<{i8,{i8,(i8,r8)}}>, Func<{i8,{i8,(i8,r8)}},{i8,(i8,r8)}>, Func<{i8,{i8,(i8,r8)}},{i8,(i8,r8)}>, Func<{i8,{i8,(i8,r8)}},{i8,{i8,(i8,r8)}},{i8,{i8,(i8,r8)},i8}>, Func<{i8,{i8,(i8,r8)}},{i8,{i8,(i8,r8)},i8}>, Func<{i8,{i8,(i8,r8)}},{i8,{i8,(i8,r8)},i8}>, EqualityComparer<{i8,(i8,r8)}>, bool, ExecCtx, i4):Seq<{i8,{i8,(i8,r8)},i8}>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<{i8,{i8,(i8,r8)},i8}>):Seq<{i8,{i8,(i8,r8)},i8}>
      1) ret
  Total Size: 73

Func sig: (<ctx>:x, TB:{A:i8, B:{X:i8, Y:(i8, r8)?}}*, TA:{Id:i8, Key:{X:i8, Y:(i8, r8)?}}*) to {A:i8, B:{X:i8, Y:(i8, r8)?}, Id:i8}*
Sequence: Seq<{i8,{i8,(i8,r8)},i8}>
 0) { A: 0, B: { X: 0, Y: (0, 0) }, Id: 0 }
 1) { A: 1, B: { X: 3, Y: (9, 13.5) }, Id: 3 }
 2) { A: 2, B: { X: 1, Y: (1, 0.5) }, Id: 1 }
 3) { A: 3, B: { X: 4, Y: (16, 32) }, Id: 4 }
 4) { A: 5, B: { X: 0, Y: (0, 0) }, Id: 0 }
 5) { A: 6, B: { X: 3, Y: (9, 13.5) }, Id: 3 }
 6) { A: 7, B: { X: 1, Y: (1, 0.5) }, Id: 1 }
 7) { A: 8, B: { X: 4, Y: (16, 32) }, Id: 4 }
 8) { A: 10, B: { X: 0, Y: (0, 0) }, Id: 0 }
 9) { A: 11, B: { X: 3, Y: (9, 13.5) }, Id: 3 }
10) { A: 12, B: { X: 1, Y: (1, 0.5) }, Id: 1 }
11) { A: 13, B: { X: 4, Y: (16, 32) }, Id: 4 }
12) { A: 15, B: { X: 0, Y: (0, 0) }, Id: 0 }
13) { A: 16, B: { X: 3, Y: (9, 13.5) }, Id: 3 }
14) { A: 17, B: { X: 1, Y: (1, 0.5) }, Id: 1 }
15) { A: 18, B: { X: 4, Y: (16, 32) }, Id: 4 }
*** Ctx ping count: 8
    [0:3](8=4+0+4): KeyJoin(*1: TB, *2: TA, *1.B, *2.Key, SetFields(!3: *1, Id : *2.Id))
###

**** New definitions: TA, type: {Id:i8, Key:(i8, (i8, r8))}*
**** New definitions: TB, type: {A:i8, B:(i8, (i8, r8))}*

> TA
TA : {Id:i8, Key:(i8, (i8, r8))}*
BndKind:Global, Type:{Id:i8, Key:(i8, (i8, r8))}*, Bnd:(Global(TA))
// (∂.TA:{Id:i8, Key:(i8, (i8, r8))}*) : {Id:i8, Key:(i8, (i8, r8))}*
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,(i8,(i8,r8))}>
      1) stloc.0 [Seq<{i8,(i8,(i8,r8))}>]
      1) ldloc.0 [Seq<{i8,(i8,(i8,r8))}>]
      1) ret
  Total Size: 11

Func sig: (TA:{Id:i8, Key:(i8, (i8, r8))}*) to {Id:i8, Key:(i8, (i8, r8))}*
Sequence: Seq<{i8,(i8,(i8,r8))}>
 0) { Id: 0, Key: (0, (0, 0)) }
 1) { Id: 1, Key: (1, (1, 0.5)) }
 2) { Id: 2, Key: (2, (4, 4)) }
 3) { Id: 3, Key: (3, (9, 13.5)) }
 4) { Id: 4, Key: (4, (16, 32)) }
###
> TB
TB : {A:i8, B:(i8, (i8, r8))}*
BndKind:Global, Type:{A:i8, B:(i8, (i8, r8))}*, Bnd:(Global(TB))
// (∂.TB:{A:i8, B:(i8, (i8, r8))}*) : {A:i8, B:(i8, (i8, r8))}*
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,(i8,(i8,r8))}>
      1) stloc.0 [Seq<{i8,(i8,(i8,r8))}>]
      1) ldloc.0 [Seq<{i8,(i8,(i8,r8))}>]
      1) ret
  Total Size: 11

Func sig: (TB:{A:i8, B:(i8, (i8, r8))}*) to {A:i8, B:(i8, (i8, r8))}*
Sequence: Seq<{i8,(i8,(i8,r8))}>
 0) { A: 0, B: (0, (0, 0)) }
 1) { A: 1, B: (3, (9, 13.5)) }
 2) { A: 2, B: (1, (1, 0.5)) }
 3) { A: 3, B: (4, (16, 32)) }
 4) { A: 4, B: (2, (4, 4)) }
 5) { A: 5, B: (0, (0, 0)) }
 6) { A: 6, B: (3, (9, 13.5)) }
 7) { A: 7, B: (1, (1, 0.5)) }
 8) { A: 8, B: (4, (16, 32)) }
 9) { A: 9, B: (2, (4, 4)) }
10) { A: 10, B: (0, (0, 0)) }
11) { A: 11, B: (3, (9, 13.5)) }
12) { A: 12, B: (1, (1, 0.5)) }
13) { A: 13, B: (4, (16, 32)) }
14) { A: 14, B: (2, (4, 4)) }
15) { A: 15, B: (0, (0, 0)) }
16) { A: 16, B: (3, (9, 13.5)) }
17) { A: 17, B: (1, (1, 0.5)) }
18) { A: 18, B: (4, (16, 32)) }
19) { A: 19, B: (2, (4, 4)) }
###
> KeyJoin(b:TB, a:TA, B, Key, b+>{Id})
KeyJoin(b : TB, a : TA, B, Key, b+>{ Id }) : {A:i8, B:(i8, (i8, r8)), Id:i8}*
BndKind:Call, Type:{A:i8, B:(i8, (i8, r8)), Id:i8}*, Bnd:(Call(∂.KeyJoin([map:1] Global(TB), [map:2] Global(TA), GetField(Scope(1), B), GetField(Scope(2), Key), SetFields([with:3] Scope(1), Id : GetField(Scope(2), Id)))))
// (<ctx>, ∂.TB:{A:i8, B:(i8, (i8, r8))}*, ∂.TA:{Id:i8, Key:(i8, (i8, r8))}*) : {A:i8, B:(i8, (i8, r8)), Id:i8}*
KeyJoin_2(Arr<obj>, {i8,(i8,(i8,r8))}):(i8,(i8,r8))
      1) ldarg.1 [{i8,(i8,(i8,r8))}]
      5) ldfld {i8,(i8,(i8,r8))}::_F1:(i8,(i8,r8))
      1) ret
  Total Size: 7

KeyJoin_3(Arr<obj>, {i8,(i8,(i8,r8))}):(i8,(i8,r8))
      1) ldarg.1 [{i8,(i8,(i8,r8))}]
      5) ldfld {i8,(i8,(i8,r8))}::_F1:(i8,(i8,r8))
      1) ret
  Total Size: 7

KeyJoin_4(Arr<obj>, {i8,(i8,(i8,r8))}, {i8,(i8,(i8,r8))}):{i8,(i8,(i8,r8)),i8}
      5) newobj {i8,(i8,(i8,r8)),i8}()
      1) dup
      1) ldc.i4.5
      5) stfld {i8,(i8,(i8,r8)),i8}::_B0:u1
      1) stloc.0 [{i8,(i8,(i8,r8)),i8}]
      1) ldloc.0 [{i8,(i8,(i8,r8)),i8}]
      1) ldarg.2 [{i8,(i8,(i8,r8))}]
      5) ldfld {i8,(i8,(i8,r8))}::_F0:i8
      5) stfld {i8,(i8,(i8,r8)),i8}::_F2:i8
      1) ldloc.0 [{i8,(i8,(i8,r8)),i8}]
      1) ldarg.1 [{i8,(i8,(i8,r8))}]
      5) ldfld {i8,(i8,(i8,r8))}::_F0:i8
      5) stfld {i8,(i8,(i8,r8)),i8}::_F0:i8
      1) ldarg.1 [{i8,(i8,(i8,r8))}]
      5) ldfld {i8,(i8,(i8,r8))}::_F1:(i8,(i8,r8))
      5) brfalse [0]
      1) ldloc.0 [{i8,(i8,(i8,r8)),i8}]
      1) dup
      1) dup
      5) ldfld {i8,(i8,(i8,r8)),i8}::_B0:u1
      1) ldc.i4.2
      1) or
      5) stfld {i8,(i8,(i8,r8)),i8}::_B0:u1
      1) ldarg.1 [{i8,(i8,(i8,r8))}]
      5) ldfld {i8,(i8,(i8,r8))}::_F1:(i8,(i8,r8))
      5) stfld {i8,(i8,(i8,r8)),i8}::_F1:(i8,(i8,r8))
  Label [0]:
      1) ldloc.0 [{i8,(i8,(i8,r8)),i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 89

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):ExecCtx
      1) stloc.0 [ExecCtx]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,(i8,(i8,r8))}>
      1) stloc.1 [Seq<{i8,(i8,(i8,r8))}>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.2
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,(i8,(i8,r8))}>
      1) stloc.2 [Seq<{i8,(i8,(i8,r8))}>]
      1) ldloc.1 [Seq<{i8,(i8,(i8,r8))}>]
      1) ldloc.2 [Seq<{i8,(i8,(i8,r8))}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<{i8,(i8,(i8,r8))},(i8,(i8,r8))>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [Func<{i8,(i8,(i8,r8))},(i8,(i8,r8))>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Func<{i8,(i8,(i8,r8))},{i8,(i8,(i8,r8))},{i8,(i8,(i8,r8)),i8}>]
      1) ldnull
      1) ldnull
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.3
      5) ldelem [EqualityComparer<(i8,(i8,r8))>]
      1) ldc.i4.1
      1) ldloc.0 [ExecCtx]
      1) ldc.i4.0
      5) call static KeyJoinGen::Exec(Seq<{i8,(i8,(i8,r8))}>, Seq<{i8,(i8,(i8,r8))}>, Func<{i8,(i8,(i8,r8))},(i8,(i8,r8))>, Func<{i8,(i8,(i8,r8))},(i8,(i8,r8))>, Func<{i8,(i8,(i8,r8))},{i8,(i8,(i8,r8))},{i8,(i8,(i8,r8)),i8}>, Func<{i8,(i8,(i8,r8))},{i8,(i8,(i8,r8)),i8}>, Func<{i8,(i8,(i8,r8))},{i8,(i8,(i8,r8)),i8}>, EqualityComparer<(i8,(i8,r8))>, bool, ExecCtx, i4):Seq<{i8,(i8,(i8,r8)),i8}>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<{i8,(i8,(i8,r8)),i8}>):Seq<{i8,(i8,(i8,r8)),i8}>
      1) ret
  Total Size: 73

Func sig: (<ctx>:x, TB:{A:i8, B:(i8, (i8, r8))}*, TA:{Id:i8, Key:(i8, (i8, r8))}*) to {A:i8, B:(i8, (i8, r8)), Id:i8}*
Sequence: Seq<{i8,(i8,(i8,r8)),i8}>
 0) { A: 0, B: (0, (0, 0)), Id: 0 }
 1) { A: 1, B: (3, (9, 13.5)), Id: 3 }
 2) { A: 2, B: (1, (1, 0.5)), Id: 1 }
 3) { A: 3, B: (4, (16, 32)), Id: 4 }
 4) { A: 4, B: (2, (4, 4)), Id: 2 }
 5) { A: 5, B: (0, (0, 0)), Id: 0 }
 6) { A: 6, B: (3, (9, 13.5)), Id: 3 }
 7) { A: 7, B: (1, (1, 0.5)), Id: 1 }
 8) { A: 8, B: (4, (16, 32)), Id: 4 }
 9) { A: 9, B: (2, (4, 4)), Id: 2 }
10) { A: 10, B: (0, (0, 0)), Id: 0 }
11) { A: 11, B: (3, (9, 13.5)), Id: 3 }
12) { A: 12, B: (1, (1, 0.5)), Id: 1 }
13) { A: 13, B: (4, (16, 32)), Id: 4 }
14) { A: 14, B: (2, (4, 4)), Id: 2 }
15) { A: 15, B: (0, (0, 0)), Id: 0 }
16) { A: 16, B: (3, (9, 13.5)), Id: 3 }
17) { A: 17, B: (1, (1, 0.5)), Id: 1 }
18) { A: 18, B: (4, (16, 32)), Id: 4 }
19) { A: 19, B: (2, (4, 4)), Id: 2 }
*** Ctx ping count: 4
    [0:3](4=0+0+4): KeyJoin(*1: TB, *2: TA, *1.B, *2.Key, SetFields(!3: *1, Id : *2.Id))
###

**** New definitions: TA, type: {Id:i8, Key:(i8, {U:i8, V:r8})}*
**** New definitions: TB, type: {A:i8, B:(i8, {U:i8, V:r8})}*

> TA
TA : {Id:i8, Key:(i8, {U:i8, V:r8})}*
BndKind:Global, Type:{Id:i8, Key:(i8, {U:i8, V:r8})}*, Bnd:(Global(TA))
// (∂.TA:{Id:i8, Key:(i8, {U:i8, V:r8})}*) : {Id:i8, Key:(i8, {U:i8, V:r8})}*
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,(i8,{i8,r8})}>
      1) stloc.0 [Seq<{i8,(i8,{i8,r8})}>]
      1) ldloc.0 [Seq<{i8,(i8,{i8,r8})}>]
      1) ret
  Total Size: 11

Func sig: (TA:{Id:i8, Key:(i8, {U:i8, V:r8})}*) to {Id:i8, Key:(i8, {U:i8, V:r8})}*
Sequence: Seq<{i8,(i8,{i8,r8})}>
 0) { Id: 0, Key: (0, { U: 0, V: 0 }) }
 1) { Id: 1, Key: (1, { U: 1, V: 0.5 }) }
 2) { Id: 2, Key: (2, { U: 4, V: 4 }) }
 3) { Id: 3, Key: (3, { U: 9, V: 13.5 }) }
 4) { Id: 4, Key: (4, { U: 16, V: 32 }) }
###
> TB
TB : {A:i8, B:(i8, {U:i8, V:r8})}*
BndKind:Global, Type:{A:i8, B:(i8, {U:i8, V:r8})}*, Bnd:(Global(TB))
// (∂.TB:{A:i8, B:(i8, {U:i8, V:r8})}*) : {A:i8, B:(i8, {U:i8, V:r8})}*
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,(i8,{i8,r8})}>
      1) stloc.0 [Seq<{i8,(i8,{i8,r8})}>]
      1) ldloc.0 [Seq<{i8,(i8,{i8,r8})}>]
      1) ret
  Total Size: 11

Func sig: (TB:{A:i8, B:(i8, {U:i8, V:r8})}*) to {A:i8, B:(i8, {U:i8, V:r8})}*
Sequence: Seq<{i8,(i8,{i8,r8})}>
 0) { A: 0, B: (0, { U: 0, V: 0 }) }
 1) { A: 1, B: (3, { U: 9, V: 13.5 }) }
 2) { A: 2, B: (1, { U: 1, V: 0.5 }) }
 3) { A: 3, B: (4, { U: 16, V: 32 }) }
 4) { A: 4, B: (2, { U: 4, V: 4 }) }
 5) { A: 5, B: (0, { U: 0, V: 0 }) }
 6) { A: 6, B: (3, { U: 9, V: 13.5 }) }
 7) { A: 7, B: (1, { U: 1, V: 0.5 }) }
 8) { A: 8, B: (4, { U: 16, V: 32 }) }
 9) { A: 9, B: (2, { U: 4, V: 4 }) }
10) { A: 10, B: (0, { U: 0, V: 0 }) }
11) { A: 11, B: (3, { U: 9, V: 13.5 }) }
12) { A: 12, B: (1, { U: 1, V: 0.5 }) }
13) { A: 13, B: (4, { U: 16, V: 32 }) }
14) { A: 14, B: (2, { U: 4, V: 4 }) }
15) { A: 15, B: (0, { U: 0, V: 0 }) }
16) { A: 16, B: (3, { U: 9, V: 13.5 }) }
17) { A: 17, B: (1, { U: 1, V: 0.5 }) }
18) { A: 18, B: (4, { U: 16, V: 32 }) }
19) { A: 19, B: (2, { U: 4, V: 4 }) }
###
> KeyJoin(b:TB, a:TA, B, Key, b+>{Id})
KeyJoin(b : TB, a : TA, B, Key, b+>{ Id }) : {A:i8, B:(i8, {U:i8, V:r8}), Id:i8}*
BndKind:Call, Type:{A:i8, B:(i8, {U:i8, V:r8}), Id:i8}*, Bnd:(Call(∂.KeyJoin([map:1] Global(TB), [map:2] Global(TA), GetField(Scope(1), B), GetField(Scope(2), Key), SetFields([with:3] Scope(1), Id : GetField(Scope(2), Id)))))
// (<ctx>, ∂.TB:{A:i8, B:(i8, {U:i8, V:r8})}*, ∂.TA:{Id:i8, Key:(i8, {U:i8, V:r8})}*) : {A:i8, B:(i8, {U:i8, V:r8}), Id:i8}*
KeyJoin_2(Arr<obj>, {i8,(i8,{i8,r8})}):(i8,{i8,r8})
      1) ldarg.1 [{i8,(i8,{i8,r8})}]
      5) ldfld {i8,(i8,{i8,r8})}::_F1:(i8,{i8,r8})
      1) ret
  Total Size: 7

KeyJoin_3(Arr<obj>, {i8,(i8,{i8,r8})}):(i8,{i8,r8})
      1) ldarg.1 [{i8,(i8,{i8,r8})}]
      5) ldfld {i8,(i8,{i8,r8})}::_F1:(i8,{i8,r8})
      1) ret
  Total Size: 7

KeyJoin_4(Arr<obj>, {i8,(i8,{i8,r8})}, {i8,(i8,{i8,r8})}):{i8,(i8,{i8,r8}),i8}
      5) newobj {i8,(i8,{i8,r8}),i8}()
      1) dup
      1) ldc.i4.5
      5) stfld {i8,(i8,{i8,r8}),i8}::_B0:u1
      1) stloc.0 [{i8,(i8,{i8,r8}),i8}]
      1) ldloc.0 [{i8,(i8,{i8,r8}),i8}]
      1) ldarg.2 [{i8,(i8,{i8,r8})}]
      5) ldfld {i8,(i8,{i8,r8})}::_F0:i8
      5) stfld {i8,(i8,{i8,r8}),i8}::_F2:i8
      1) ldloc.0 [{i8,(i8,{i8,r8}),i8}]
      1) ldarg.1 [{i8,(i8,{i8,r8})}]
      5) ldfld {i8,(i8,{i8,r8})}::_F0:i8
      5) stfld {i8,(i8,{i8,r8}),i8}::_F0:i8
      1) ldarg.1 [{i8,(i8,{i8,r8})}]
      5) ldfld {i8,(i8,{i8,r8})}::_F1:(i8,{i8,r8})
      5) brfalse [0]
      1) ldloc.0 [{i8,(i8,{i8,r8}),i8}]
      1) dup
      1) dup
      5) ldfld {i8,(i8,{i8,r8}),i8}::_B0:u1
      1) ldc.i4.2
      1) or
      5) stfld {i8,(i8,{i8,r8}),i8}::_B0:u1
      1) ldarg.1 [{i8,(i8,{i8,r8})}]
      5) ldfld {i8,(i8,{i8,r8})}::_F1:(i8,{i8,r8})
      5) stfld {i8,(i8,{i8,r8}),i8}::_F1:(i8,{i8,r8})
  Label [0]:
      1) ldloc.0 [{i8,(i8,{i8,r8}),i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 89

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):ExecCtx
      1) stloc.0 [ExecCtx]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,(i8,{i8,r8})}>
      1) stloc.1 [Seq<{i8,(i8,{i8,r8})}>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.2
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,(i8,{i8,r8})}>
      1) stloc.2 [Seq<{i8,(i8,{i8,r8})}>]
      1) ldloc.1 [Seq<{i8,(i8,{i8,r8})}>]
      1) ldloc.2 [Seq<{i8,(i8,{i8,r8})}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<{i8,(i8,{i8,r8})},(i8,{i8,r8})>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [Func<{i8,(i8,{i8,r8})},(i8,{i8,r8})>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Func<{i8,(i8,{i8,r8})},{i8,(i8,{i8,r8})},{i8,(i8,{i8,r8}),i8}>]
      1) ldnull
      1) ldnull
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.3
      5) ldelem [EqualityComparer<(i8,{i8,r8})>]
      1) ldc.i4.1
      1) ldloc.0 [ExecCtx]
      1) ldc.i4.0
      5) call static KeyJoinGen::Exec(Seq<{i8,(i8,{i8,r8})}>, Seq<{i8,(i8,{i8,r8})}>, Func<{i8,(i8,{i8,r8})},(i8,{i8,r8})>, Func<{i8,(i8,{i8,r8})},(i8,{i8,r8})>, Func<{i8,(i8,{i8,r8})},{i8,(i8,{i8,r8})},{i8,(i8,{i8,r8}),i8}>, Func<{i8,(i8,{i8,r8})},{i8,(i8,{i8,r8}),i8}>, Func<{i8,(i8,{i8,r8})},{i8,(i8,{i8,r8}),i8}>, EqualityComparer<(i8,{i8,r8})>, bool, ExecCtx, i4):Seq<{i8,(i8,{i8,r8}),i8}>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<{i8,(i8,{i8,r8}),i8}>):Seq<{i8,(i8,{i8,r8}),i8}>
      1) ret
  Total Size: 73

Func sig: (<ctx>:x, TB:{A:i8, B:(i8, {U:i8, V:r8})}*, TA:{Id:i8, Key:(i8, {U:i8, V:r8})}*) to {A:i8, B:(i8, {U:i8, V:r8}), Id:i8}*
Sequence: Seq<{i8,(i8,{i8,r8}),i8}>
 0) { A: 0, B: (0, { U: 0, V: 0 }), Id: 0 }
 1) { A: 1, B: (3, { U: 9, V: 13.5 }), Id: 3 }
 2) { A: 2, B: (1, { U: 1, V: 0.5 }), Id: 1 }
 3) { A: 3, B: (4, { U: 16, V: 32 }), Id: 4 }
 4) { A: 4, B: (2, { U: 4, V: 4 }), Id: 2 }
 5) { A: 5, B: (0, { U: 0, V: 0 }), Id: 0 }
 6) { A: 6, B: (3, { U: 9, V: 13.5 }), Id: 3 }
 7) { A: 7, B: (1, { U: 1, V: 0.5 }), Id: 1 }
 8) { A: 8, B: (4, { U: 16, V: 32 }), Id: 4 }
 9) { A: 9, B: (2, { U: 4, V: 4 }), Id: 2 }
10) { A: 10, B: (0, { U: 0, V: 0 }), Id: 0 }
11) { A: 11, B: (3, { U: 9, V: 13.5 }), Id: 3 }
12) { A: 12, B: (1, { U: 1, V: 0.5 }), Id: 1 }
13) { A: 13, B: (4, { U: 16, V: 32 }), Id: 4 }
14) { A: 14, B: (2, { U: 4, V: 4 }), Id: 2 }
15) { A: 15, B: (0, { U: 0, V: 0 }), Id: 0 }
16) { A: 16, B: (3, { U: 9, V: 13.5 }), Id: 3 }
17) { A: 17, B: (1, { U: 1, V: 0.5 }), Id: 1 }
18) { A: 18, B: (4, { U: 16, V: 32 }), Id: 4 }
19) { A: 19, B: (2, { U: 4, V: 4 }), Id: 2 }
*** Ctx ping count: 4
    [0:3](4=0+0+4): KeyJoin(*1: TB, *2: TA, *1.B, *2.Key, SetFields(!3: *1, Id : *2.Id))
###

**** New definitions: TA, type: {Id:i8, Key:(i8, (i8, r8?))}*
**** New definitions: TB, type: {A:i8, B:(i8, (i8, r8?))}*

> TA
TA : {Id:i8, Key:(i8, (i8, r8?))}*
BndKind:Global, Type:{Id:i8, Key:(i8, (i8, r8?))}*, Bnd:(Global(TA))
// (∂.TA:{Id:i8, Key:(i8, (i8, r8?))}*) : {Id:i8, Key:(i8, (i8, r8?))}*
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,(i8,(i8,Opt<r8>))}>
      1) stloc.0 [Seq<{i8,(i8,(i8,Opt<r8>))}>]
      1) ldloc.0 [Seq<{i8,(i8,(i8,Opt<r8>))}>]
      1) ret
  Total Size: 11

Func sig: (TA:{Id:i8, Key:(i8, (i8, r8?))}*) to {Id:i8, Key:(i8, (i8, r8?))}*
Sequence: Seq<{i8,(i8,(i8,Opt<r8>))}>
 0) { Id: 0, Key: (0, (0, 0)) }
 1) { Id: 1, Key: (1, (1, 0.5)) }
 2) { Id: 2, Key: (2, (4, <null>)) }
 3) { Id: 3, Key: (3, (9, 13.5)) }
 4) { Id: 4, Key: (4, (16, 32)) }
###
> TB
TB : {A:i8, B:(i8, (i8, r8?))}*
BndKind:Global, Type:{A:i8, B:(i8, (i8, r8?))}*, Bnd:(Global(TB))
// (∂.TB:{A:i8, B:(i8, (i8, r8?))}*) : {A:i8, B:(i8, (i8, r8?))}*
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,(i8,(i8,Opt<r8>))}>
      1) stloc.0 [Seq<{i8,(i8,(i8,Opt<r8>))}>]
      1) ldloc.0 [Seq<{i8,(i8,(i8,Opt<r8>))}>]
      1) ret
  Total Size: 11

Func sig: (TB:{A:i8, B:(i8, (i8, r8?))}*) to {A:i8, B:(i8, (i8, r8?))}*
Sequence: Seq<{i8,(i8,(i8,Opt<r8>))}>
 0) { A: 0, B: (0, (0, 0)) }
 1) { A: 1, B: (3, (9, 13.5)) }
 2) { A: 2, B: (1, (1, 0.5)) }
 3) { A: 3, B: (4, (16, 32)) }
 4) { A: 4, B: (2, (4, <null>)) }
 5) { A: 5, B: (0, (0, 0)) }
 6) { A: 6, B: (3, (9, 13.5)) }
 7) { A: 7, B: (1, (1, 0.5)) }
 8) { A: 8, B: (4, (16, 32)) }
 9) { A: 9, B: (2, (4, <null>)) }
10) { A: 10, B: (0, (0, 0)) }
11) { A: 11, B: (3, (9, 13.5)) }
12) { A: 12, B: (1, (1, 0.5)) }
13) { A: 13, B: (4, (16, 32)) }
14) { A: 14, B: (2, (4, <null>)) }
15) { A: 15, B: (0, (0, 0)) }
16) { A: 16, B: (3, (9, 13.5)) }
17) { A: 17, B: (1, (1, 0.5)) }
18) { A: 18, B: (4, (16, 32)) }
19) { A: 19, B: (2, (4, <null>)) }
###
> KeyJoin(b:TB, a:TA, B, Key, b+>{Id})
KeyJoin(b : TB, a : TA, B, Key, b+>{ Id }) : {A:i8, B:(i8, (i8, r8?)), Id:i8}*
BndKind:Call, Type:{A:i8, B:(i8, (i8, r8?)), Id:i8}*, Bnd:(Call(∂.KeyJoin([map:1] Global(TB), [map:2] Global(TA), GetField(Scope(1), B), GetField(Scope(2), Key), SetFields([with:3] Scope(1), Id : GetField(Scope(2), Id)))))
// (<ctx>, ∂.TB:{A:i8, B:(i8, (i8, r8?))}*, ∂.TA:{Id:i8, Key:(i8, (i8, r8?))}*) : {A:i8, B:(i8, (i8, r8?)), Id:i8}*
KeyJoin_2(Arr<obj>, {i8,(i8,(i8,Opt<r8>))}):(i8,(i8,Opt<r8>))
      1) ldarg.1 [{i8,(i8,(i8,Opt<r8>))}]
      5) ldfld {i8,(i8,(i8,Opt<r8>))}::_F1:(i8,(i8,Opt<r8>))
      1) ret
  Total Size: 7

KeyJoin_3(Arr<obj>, {i8,(i8,(i8,Opt<r8>))}):(i8,(i8,Opt<r8>))
      1) ldarg.1 [{i8,(i8,(i8,Opt<r8>))}]
      5) ldfld {i8,(i8,(i8,Opt<r8>))}::_F1:(i8,(i8,Opt<r8>))
      1) ret
  Total Size: 7

KeyJoin_4(Arr<obj>, {i8,(i8,(i8,Opt<r8>))}, {i8,(i8,(i8,Opt<r8>))}):{i8,(i8,(i8,Opt<r8>)),i8}
      5) newobj {i8,(i8,(i8,Opt<r8>)),i8}()
      1) dup
      1) ldc.i4.5
      5) stfld {i8,(i8,(i8,Opt<r8>)),i8}::_B0:u1
      1) stloc.0 [{i8,(i8,(i8,Opt<r8>)),i8}]
      1) ldloc.0 [{i8,(i8,(i8,Opt<r8>)),i8}]
      1) ldarg.2 [{i8,(i8,(i8,Opt<r8>))}]
      5) ldfld {i8,(i8,(i8,Opt<r8>))}::_F0:i8
      5) stfld {i8,(i8,(i8,Opt<r8>)),i8}::_F2:i8
      1) ldloc.0 [{i8,(i8,(i8,Opt<r8>)),i8}]
      1) ldarg.1 [{i8,(i8,(i8,Opt<r8>))}]
      5) ldfld {i8,(i8,(i8,Opt<r8>))}::_F0:i8
      5) stfld {i8,(i8,(i8,Opt<r8>)),i8}::_F0:i8
      1) ldarg.1 [{i8,(i8,(i8,Opt<r8>))}]
      5) ldfld {i8,(i8,(i8,Opt<r8>))}::_F1:(i8,(i8,Opt<r8>))
      5) brfalse [0]
      1) ldloc.0 [{i8,(i8,(i8,Opt<r8>)),i8}]
      1) dup
      1) dup
      5) ldfld {i8,(i8,(i8,Opt<r8>)),i8}::_B0:u1
      1) ldc.i4.2
      1) or
      5) stfld {i8,(i8,(i8,Opt<r8>)),i8}::_B0:u1
      1) ldarg.1 [{i8,(i8,(i8,Opt<r8>))}]
      5) ldfld {i8,(i8,(i8,Opt<r8>))}::_F1:(i8,(i8,Opt<r8>))
      5) stfld {i8,(i8,(i8,Opt<r8>)),i8}::_F1:(i8,(i8,Opt<r8>))
  Label [0]:
      1) ldloc.0 [{i8,(i8,(i8,Opt<r8>)),i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 89

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):ExecCtx
      1) stloc.0 [ExecCtx]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,(i8,(i8,Opt<r8>))}>
      1) stloc.1 [Seq<{i8,(i8,(i8,Opt<r8>))}>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.2
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,(i8,(i8,Opt<r8>))}>
      1) stloc.2 [Seq<{i8,(i8,(i8,Opt<r8>))}>]
      1) ldloc.1 [Seq<{i8,(i8,(i8,Opt<r8>))}>]
      1) ldloc.2 [Seq<{i8,(i8,(i8,Opt<r8>))}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<{i8,(i8,(i8,Opt<r8>))},(i8,(i8,Opt<r8>))>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [Func<{i8,(i8,(i8,Opt<r8>))},(i8,(i8,Opt<r8>))>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Func<{i8,(i8,(i8,Opt<r8>))},{i8,(i8,(i8,Opt<r8>))},{i8,(i8,(i8,Opt<r8>)),i8}>]
      1) ldnull
      1) ldnull
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.3
      5) ldelem [EqualityComparer<(i8,(i8,Opt<r8>))>]
      1) ldc.i4.1
      1) ldloc.0 [ExecCtx]
      1) ldc.i4.0
      5) call static KeyJoinGen::Exec(Seq<{i8,(i8,(i8,Opt<r8>))}>, Seq<{i8,(i8,(i8,Opt<r8>))}>, Func<{i8,(i8,(i8,Opt<r8>))},(i8,(i8,Opt<r8>))>, Func<{i8,(i8,(i8,Opt<r8>))},(i8,(i8,Opt<r8>))>, Func<{i8,(i8,(i8,Opt<r8>))},{i8,(i8,(i8,Opt<r8>))},{i8,(i8,(i8,Opt<r8>)),i8}>, Func<{i8,(i8,(i8,Opt<r8>))},{i8,(i8,(i8,Opt<r8>)),i8}>, Func<{i8,(i8,(i8,Opt<r8>))},{i8,(i8,(i8,Opt<r8>)),i8}>, EqualityComparer<(i8,(i8,Opt<r8>))>, bool, ExecCtx, i4):Seq<{i8,(i8,(i8,Opt<r8>)),i8}>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<{i8,(i8,(i8,Opt<r8>)),i8}>):Seq<{i8,(i8,(i8,Opt<r8>)),i8}>
      1) ret
  Total Size: 73

Func sig: (<ctx>:x, TB:{A:i8, B:(i8, (i8, r8?))}*, TA:{Id:i8, Key:(i8, (i8, r8?))}*) to {A:i8, B:(i8, (i8, r8?)), Id:i8}*
Sequence: Seq<{i8,(i8,(i8,Opt<r8>)),i8}>
 0) { A: 0, B: (0, (0, 0)), Id: 0 }
 1) { A: 1, B: (3, (9, 13.5)), Id: 3 }
 2) { A: 2, B: (1, (1, 0.5)), Id: 1 }
 3) { A: 3, B: (4, (16, 32)), Id: 4 }
 4) { A: 5, B: (0, (0, 0)), Id: 0 }
 5) { A: 6, B: (3, (9, 13.5)), Id: 3 }
 6) { A: 7, B: (1, (1, 0.5)), Id: 1 }
 7) { A: 8, B: (4, (16, 32)), Id: 4 }
 8) { A: 10, B: (0, (0, 0)), Id: 0 }
 9) { A: 11, B: (3, (9, 13.5)), Id: 3 }
10) { A: 12, B: (1, (1, 0.5)), Id: 1 }
11) { A: 13, B: (4, (16, 32)), Id: 4 }
12) { A: 15, B: (0, (0, 0)), Id: 0 }
13) { A: 16, B: (3, (9, 13.5)), Id: 3 }
14) { A: 17, B: (1, (1, 0.5)), Id: 1 }
15) { A: 18, B: (4, (16, 32)), Id: 4 }
*** Ctx ping count: 8
    [0:3](8=4+0+4): KeyJoin(*1: TB, *2: TA, *1.B, *2.Key, SetFields(!3: *1, Id : *2.Id))
###

**** New definitions: TA, type: {Id:i8, Key:(i8, {U:i8, V:r8?})}*
**** New definitions: TB, type: {A:i8, B:(i8, {U:i8, V:r8?})}*

> TA
TA : {Id:i8, Key:(i8, {U:i8, V:r8?})}*
BndKind:Global, Type:{Id:i8, Key:(i8, {U:i8, V:r8?})}*, Bnd:(Global(TA))
// (∂.TA:{Id:i8, Key:(i8, {U:i8, V:r8?})}*) : {Id:i8, Key:(i8, {U:i8, V:r8?})}*
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,(i8,{i8,r8})}>
      1) stloc.0 [Seq<{i8,(i8,{i8,r8})}>]
      1) ldloc.0 [Seq<{i8,(i8,{i8,r8})}>]
      1) ret
  Total Size: 11

Func sig: (TA:{Id:i8, Key:(i8, {U:i8, V:r8?})}*) to {Id:i8, Key:(i8, {U:i8, V:r8?})}*
Sequence: Seq<{i8,(i8,{i8,r8})}>
 0) { Id: 0, Key: (0, { U: 0, V: 0 }) }
 1) { Id: 1, Key: (1, { U: 1, V: 0.5 }) }
 2) { Id: 2, Key: (2, { U: 4, V: <null> }) }
 3) { Id: 3, Key: (3, { U: 9, V: 13.5 }) }
 4) { Id: 4, Key: (4, { U: 16, V: 32 }) }
###
> TB
TB : {A:i8, B:(i8, {U:i8, V:r8?})}*
BndKind:Global, Type:{A:i8, B:(i8, {U:i8, V:r8?})}*, Bnd:(Global(TB))
// (∂.TB:{A:i8, B:(i8, {U:i8, V:r8?})}*) : {A:i8, B:(i8, {U:i8, V:r8?})}*
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,(i8,{i8,r8})}>
      1) stloc.0 [Seq<{i8,(i8,{i8,r8})}>]
      1) ldloc.0 [Seq<{i8,(i8,{i8,r8})}>]
      1) ret
  Total Size: 11

Func sig: (TB:{A:i8, B:(i8, {U:i8, V:r8?})}*) to {A:i8, B:(i8, {U:i8, V:r8?})}*
Sequence: Seq<{i8,(i8,{i8,r8})}>
 0) { A: 0, B: (0, { U: 0, V: 0 }) }
 1) { A: 1, B: (3, { U: 9, V: 13.5 }) }
 2) { A: 2, B: (1, { U: 1, V: 0.5 }) }
 3) { A: 3, B: (4, { U: 16, V: 32 }) }
 4) { A: 4, B: (2, { U: 4, V: <null> }) }
 5) { A: 5, B: (0, { U: 0, V: 0 }) }
 6) { A: 6, B: (3, { U: 9, V: 13.5 }) }
 7) { A: 7, B: (1, { U: 1, V: 0.5 }) }
 8) { A: 8, B: (4, { U: 16, V: 32 }) }
 9) { A: 9, B: (2, { U: 4, V: <null> }) }
10) { A: 10, B: (0, { U: 0, V: 0 }) }
11) { A: 11, B: (3, { U: 9, V: 13.5 }) }
12) { A: 12, B: (1, { U: 1, V: 0.5 }) }
13) { A: 13, B: (4, { U: 16, V: 32 }) }
14) { A: 14, B: (2, { U: 4, V: <null> }) }
15) { A: 15, B: (0, { U: 0, V: 0 }) }
16) { A: 16, B: (3, { U: 9, V: 13.5 }) }
17) { A: 17, B: (1, { U: 1, V: 0.5 }) }
18) { A: 18, B: (4, { U: 16, V: 32 }) }
19) { A: 19, B: (2, { U: 4, V: <null> }) }
###
> KeyJoin(b:TB, a:TA, B, Key, b+>{Id})
KeyJoin(b : TB, a : TA, B, Key, b+>{ Id }) : {A:i8, B:(i8, {U:i8, V:r8?}), Id:i8}*
BndKind:Call, Type:{A:i8, B:(i8, {U:i8, V:r8?}), Id:i8}*, Bnd:(Call(∂.KeyJoin([map:1] Global(TB), [map:2] Global(TA), GetField(Scope(1), B), GetField(Scope(2), Key), SetFields([with:3] Scope(1), Id : GetField(Scope(2), Id)))))
// (<ctx>, ∂.TB:{A:i8, B:(i8, {U:i8, V:r8?})}*, ∂.TA:{Id:i8, Key:(i8, {U:i8, V:r8?})}*) : {A:i8, B:(i8, {U:i8, V:r8?}), Id:i8}*
KeyJoin_2(Arr<obj>, {i8,(i8,{i8,r8})}):(i8,{i8,r8})
      1) ldarg.1 [{i8,(i8,{i8,r8})}]
      5) ldfld {i8,(i8,{i8,r8})}::_F1:(i8,{i8,r8})
      1) ret
  Total Size: 7

KeyJoin_3(Arr<obj>, {i8,(i8,{i8,r8})}):(i8,{i8,r8})
      1) ldarg.1 [{i8,(i8,{i8,r8})}]
      5) ldfld {i8,(i8,{i8,r8})}::_F1:(i8,{i8,r8})
      1) ret
  Total Size: 7

KeyJoin_4(Arr<obj>, {i8,(i8,{i8,r8})}, {i8,(i8,{i8,r8})}):{i8,(i8,{i8,r8}),i8}
      5) newobj {i8,(i8,{i8,r8}),i8}()
      1) dup
      1) ldc.i4.5
      5) stfld {i8,(i8,{i8,r8}),i8}::_B0:u1
      1) stloc.0 [{i8,(i8,{i8,r8}),i8}]
      1) ldloc.0 [{i8,(i8,{i8,r8}),i8}]
      1) ldarg.2 [{i8,(i8,{i8,r8})}]
      5) ldfld {i8,(i8,{i8,r8})}::_F0:i8
      5) stfld {i8,(i8,{i8,r8}),i8}::_F2:i8
      1) ldloc.0 [{i8,(i8,{i8,r8}),i8}]
      1) ldarg.1 [{i8,(i8,{i8,r8})}]
      5) ldfld {i8,(i8,{i8,r8})}::_F0:i8
      5) stfld {i8,(i8,{i8,r8}),i8}::_F0:i8
      1) ldarg.1 [{i8,(i8,{i8,r8})}]
      5) ldfld {i8,(i8,{i8,r8})}::_F1:(i8,{i8,r8})
      5) brfalse [0]
      1) ldloc.0 [{i8,(i8,{i8,r8}),i8}]
      1) dup
      1) dup
      5) ldfld {i8,(i8,{i8,r8}),i8}::_B0:u1
      1) ldc.i4.2
      1) or
      5) stfld {i8,(i8,{i8,r8}),i8}::_B0:u1
      1) ldarg.1 [{i8,(i8,{i8,r8})}]
      5) ldfld {i8,(i8,{i8,r8})}::_F1:(i8,{i8,r8})
      5) stfld {i8,(i8,{i8,r8}),i8}::_F1:(i8,{i8,r8})
  Label [0]:
      1) ldloc.0 [{i8,(i8,{i8,r8}),i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 89

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):ExecCtx
      1) stloc.0 [ExecCtx]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,(i8,{i8,r8})}>
      1) stloc.1 [Seq<{i8,(i8,{i8,r8})}>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.2
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,(i8,{i8,r8})}>
      1) stloc.2 [Seq<{i8,(i8,{i8,r8})}>]
      1) ldloc.1 [Seq<{i8,(i8,{i8,r8})}>]
      1) ldloc.2 [Seq<{i8,(i8,{i8,r8})}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<{i8,(i8,{i8,r8})},(i8,{i8,r8})>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [Func<{i8,(i8,{i8,r8})},(i8,{i8,r8})>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Func<{i8,(i8,{i8,r8})},{i8,(i8,{i8,r8})},{i8,(i8,{i8,r8}),i8}>]
      1) ldnull
      1) ldnull
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.3
      5) ldelem [EqualityComparer<(i8,{i8,r8})>]
      1) ldc.i4.1
      1) ldloc.0 [ExecCtx]
      1) ldc.i4.0
      5) call static KeyJoinGen::Exec(Seq<{i8,(i8,{i8,r8})}>, Seq<{i8,(i8,{i8,r8})}>, Func<{i8,(i8,{i8,r8})},(i8,{i8,r8})>, Func<{i8,(i8,{i8,r8})},(i8,{i8,r8})>, Func<{i8,(i8,{i8,r8})},{i8,(i8,{i8,r8})},{i8,(i8,{i8,r8}),i8}>, Func<{i8,(i8,{i8,r8})},{i8,(i8,{i8,r8}),i8}>, Func<{i8,(i8,{i8,r8})},{i8,(i8,{i8,r8}),i8}>, EqualityComparer<(i8,{i8,r8})>, bool, ExecCtx, i4):Seq<{i8,(i8,{i8,r8}),i8}>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<{i8,(i8,{i8,r8}),i8}>):Seq<{i8,(i8,{i8,r8}),i8}>
      1) ret
  Total Size: 73

Func sig: (<ctx>:x, TB:{A:i8, B:(i8, {U:i8, V:r8?})}*, TA:{Id:i8, Key:(i8, {U:i8, V:r8?})}*) to {A:i8, B:(i8, {U:i8, V:r8?}), Id:i8}*
Sequence: Seq<{i8,(i8,{i8,r8}),i8}>
 0) { A: 0, B: (0, { U: 0, V: 0 }), Id: 0 }
 1) { A: 1, B: (3, { U: 9, V: 13.5 }), Id: 3 }
 2) { A: 2, B: (1, { U: 1, V: 0.5 }), Id: 1 }
 3) { A: 3, B: (4, { U: 16, V: 32 }), Id: 4 }
 4) { A: 5, B: (0, { U: 0, V: 0 }), Id: 0 }
 5) { A: 6, B: (3, { U: 9, V: 13.5 }), Id: 3 }
 6) { A: 7, B: (1, { U: 1, V: 0.5 }), Id: 1 }
 7) { A: 8, B: (4, { U: 16, V: 32 }), Id: 4 }
 8) { A: 10, B: (0, { U: 0, V: 0 }), Id: 0 }
 9) { A: 11, B: (3, { U: 9, V: 13.5 }), Id: 3 }
10) { A: 12, B: (1, { U: 1, V: 0.5 }), Id: 1 }
11) { A: 13, B: (4, { U: 16, V: 32 }), Id: 4 }
12) { A: 15, B: (0, { U: 0, V: 0 }), Id: 0 }
13) { A: 16, B: (3, { U: 9, V: 13.5 }), Id: 3 }
14) { A: 17, B: (1, { U: 1, V: 0.5 }), Id: 1 }
15) { A: 18, B: (4, { U: 16, V: 32 }), Id: 4 }
*** Ctx ping count: 8
    [0:3](8=4+0+4): KeyJoin(*1: TB, *2: TA, *1.B, *2.Key, SetFields(!3: *1, Id : *2.Id))
###

**** New definitions: TA, type: {Id:i8, Key:(i8, (i8, r8)?)}*
**** New definitions: TB, type: {A:i8, B:(i8, (i8, r8)?)}*

> TA
TA : {Id:i8, Key:(i8, (i8, r8)?)}*
BndKind:Global, Type:{Id:i8, Key:(i8, (i8, r8)?)}*, Bnd:(Global(TA))
// (∂.TA:{Id:i8, Key:(i8, (i8, r8)?)}*) : {Id:i8, Key:(i8, (i8, r8)?)}*
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,(i8,(i8,r8))}>
      1) stloc.0 [Seq<{i8,(i8,(i8,r8))}>]
      1) ldloc.0 [Seq<{i8,(i8,(i8,r8))}>]
      1) ret
  Total Size: 11

Func sig: (TA:{Id:i8, Key:(i8, (i8, r8)?)}*) to {Id:i8, Key:(i8, (i8, r8)?)}*
Sequence: Seq<{i8,(i8,(i8,r8))}>
 0) { Id: 0, Key: (0, (0, 0)) }
 1) { Id: 1, Key: (1, (1, 0.5)) }
 2) { Id: 2, Key: (2, <null>) }
 3) { Id: 3, Key: (3, (9, 13.5)) }
 4) { Id: 4, Key: (4, (16, 32)) }
###
> TB
TB : {A:i8, B:(i8, (i8, r8)?)}*
BndKind:Global, Type:{A:i8, B:(i8, (i8, r8)?)}*, Bnd:(Global(TB))
// (∂.TB:{A:i8, B:(i8, (i8, r8)?)}*) : {A:i8, B:(i8, (i8, r8)?)}*
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,(i8,(i8,r8))}>
      1) stloc.0 [Seq<{i8,(i8,(i8,r8))}>]
      1) ldloc.0 [Seq<{i8,(i8,(i8,r8))}>]
      1) ret
  Total Size: 11

Func sig: (TB:{A:i8, B:(i8, (i8, r8)?)}*) to {A:i8, B:(i8, (i8, r8)?)}*
Sequence: Seq<{i8,(i8,(i8,r8))}>
 0) { A: 0, B: (0, (0, 0)) }
 1) { A: 1, B: (3, (9, 13.5)) }
 2) { A: 2, B: (1, (1, 0.5)) }
 3) { A: 3, B: (4, (16, 32)) }
 4) { A: 4, B: (2, <null>) }
 5) { A: 5, B: (0, (0, 0)) }
 6) { A: 6, B: (3, (9, 13.5)) }
 7) { A: 7, B: (1, (1, 0.5)) }
 8) { A: 8, B: (4, (16, 32)) }
 9) { A: 9, B: (2, <null>) }
10) { A: 10, B: (0, (0, 0)) }
11) { A: 11, B: (3, (9, 13.5)) }
12) { A: 12, B: (1, (1, 0.5)) }
13) { A: 13, B: (4, (16, 32)) }
14) { A: 14, B: (2, <null>) }
15) { A: 15, B: (0, (0, 0)) }
16) { A: 16, B: (3, (9, 13.5)) }
17) { A: 17, B: (1, (1, 0.5)) }
18) { A: 18, B: (4, (16, 32)) }
19) { A: 19, B: (2, <null>) }
###
> KeyJoin(b:TB, a:TA, B, Key, b+>{Id})
KeyJoin(b : TB, a : TA, B, Key, b+>{ Id }) : {A:i8, B:(i8, (i8, r8)?), Id:i8}*
BndKind:Call, Type:{A:i8, B:(i8, (i8, r8)?), Id:i8}*, Bnd:(Call(∂.KeyJoin([map:1] Global(TB), [map:2] Global(TA), GetField(Scope(1), B), GetField(Scope(2), Key), SetFields([with:3] Scope(1), Id : GetField(Scope(2), Id)))))
// (<ctx>, ∂.TB:{A:i8, B:(i8, (i8, r8)?)}*, ∂.TA:{Id:i8, Key:(i8, (i8, r8)?)}*) : {A:i8, B:(i8, (i8, r8)?), Id:i8}*
KeyJoin_2(Arr<obj>, {i8,(i8,(i8,r8))}):(i8,(i8,r8))
      1) ldarg.1 [{i8,(i8,(i8,r8))}]
      5) ldfld {i8,(i8,(i8,r8))}::_F1:(i8,(i8,r8))
      1) ret
  Total Size: 7

KeyJoin_3(Arr<obj>, {i8,(i8,(i8,r8))}):(i8,(i8,r8))
      1) ldarg.1 [{i8,(i8,(i8,r8))}]
      5) ldfld {i8,(i8,(i8,r8))}::_F1:(i8,(i8,r8))
      1) ret
  Total Size: 7

KeyJoin_4(Arr<obj>, {i8,(i8,(i8,r8))}, {i8,(i8,(i8,r8))}):{i8,(i8,(i8,r8)),i8}
      5) newobj {i8,(i8,(i8,r8)),i8}()
      1) dup
      1) ldc.i4.5
      5) stfld {i8,(i8,(i8,r8)),i8}::_B0:u1
      1) stloc.0 [{i8,(i8,(i8,r8)),i8}]
      1) ldloc.0 [{i8,(i8,(i8,r8)),i8}]
      1) ldarg.2 [{i8,(i8,(i8,r8))}]
      5) ldfld {i8,(i8,(i8,r8))}::_F0:i8
      5) stfld {i8,(i8,(i8,r8)),i8}::_F2:i8
      1) ldloc.0 [{i8,(i8,(i8,r8)),i8}]
      1) ldarg.1 [{i8,(i8,(i8,r8))}]
      5) ldfld {i8,(i8,(i8,r8))}::_F0:i8
      5) stfld {i8,(i8,(i8,r8)),i8}::_F0:i8
      1) ldarg.1 [{i8,(i8,(i8,r8))}]
      5) ldfld {i8,(i8,(i8,r8))}::_F1:(i8,(i8,r8))
      5) brfalse [0]
      1) ldloc.0 [{i8,(i8,(i8,r8)),i8}]
      1) dup
      1) dup
      5) ldfld {i8,(i8,(i8,r8)),i8}::_B0:u1
      1) ldc.i4.2
      1) or
      5) stfld {i8,(i8,(i8,r8)),i8}::_B0:u1
      1) ldarg.1 [{i8,(i8,(i8,r8))}]
      5) ldfld {i8,(i8,(i8,r8))}::_F1:(i8,(i8,r8))
      5) stfld {i8,(i8,(i8,r8)),i8}::_F1:(i8,(i8,r8))
  Label [0]:
      1) ldloc.0 [{i8,(i8,(i8,r8)),i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 89

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):ExecCtx
      1) stloc.0 [ExecCtx]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,(i8,(i8,r8))}>
      1) stloc.1 [Seq<{i8,(i8,(i8,r8))}>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.2
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,(i8,(i8,r8))}>
      1) stloc.2 [Seq<{i8,(i8,(i8,r8))}>]
      1) ldloc.1 [Seq<{i8,(i8,(i8,r8))}>]
      1) ldloc.2 [Seq<{i8,(i8,(i8,r8))}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<{i8,(i8,(i8,r8))},(i8,(i8,r8))>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [Func<{i8,(i8,(i8,r8))},(i8,(i8,r8))>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Func<{i8,(i8,(i8,r8))},{i8,(i8,(i8,r8))},{i8,(i8,(i8,r8)),i8}>]
      1) ldnull
      1) ldnull
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.3
      5) ldelem [EqualityComparer<(i8,(i8,r8))>]
      1) ldc.i4.1
      1) ldloc.0 [ExecCtx]
      1) ldc.i4.0
      5) call static KeyJoinGen::Exec(Seq<{i8,(i8,(i8,r8))}>, Seq<{i8,(i8,(i8,r8))}>, Func<{i8,(i8,(i8,r8))},(i8,(i8,r8))>, Func<{i8,(i8,(i8,r8))},(i8,(i8,r8))>, Func<{i8,(i8,(i8,r8))},{i8,(i8,(i8,r8))},{i8,(i8,(i8,r8)),i8}>, Func<{i8,(i8,(i8,r8))},{i8,(i8,(i8,r8)),i8}>, Func<{i8,(i8,(i8,r8))},{i8,(i8,(i8,r8)),i8}>, EqualityComparer<(i8,(i8,r8))>, bool, ExecCtx, i4):Seq<{i8,(i8,(i8,r8)),i8}>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<{i8,(i8,(i8,r8)),i8}>):Seq<{i8,(i8,(i8,r8)),i8}>
      1) ret
  Total Size: 73

Func sig: (<ctx>:x, TB:{A:i8, B:(i8, (i8, r8)?)}*, TA:{Id:i8, Key:(i8, (i8, r8)?)}*) to {A:i8, B:(i8, (i8, r8)?), Id:i8}*
Sequence: Seq<{i8,(i8,(i8,r8)),i8}>
 0) { A: 0, B: (0, (0, 0)), Id: 0 }
 1) { A: 1, B: (3, (9, 13.5)), Id: 3 }
 2) { A: 2, B: (1, (1, 0.5)), Id: 1 }
 3) { A: 3, B: (4, (16, 32)), Id: 4 }
 4) { A: 5, B: (0, (0, 0)), Id: 0 }
 5) { A: 6, B: (3, (9, 13.5)), Id: 3 }
 6) { A: 7, B: (1, (1, 0.5)), Id: 1 }
 7) { A: 8, B: (4, (16, 32)), Id: 4 }
 8) { A: 10, B: (0, (0, 0)), Id: 0 }
 9) { A: 11, B: (3, (9, 13.5)), Id: 3 }
10) { A: 12, B: (1, (1, 0.5)), Id: 1 }
11) { A: 13, B: (4, (16, 32)), Id: 4 }
12) { A: 15, B: (0, (0, 0)), Id: 0 }
13) { A: 16, B: (3, (9, 13.5)), Id: 3 }
14) { A: 17, B: (1, (1, 0.5)), Id: 1 }
15) { A: 18, B: (4, (16, 32)), Id: 4 }
*** Ctx ping count: 8
    [0:3](8=4+0+4): KeyJoin(*1: TB, *2: TA, *1.B, *2.Key, SetFields(!3: *1, Id : *2.Id))
###

**** New definitions: TA, type: {Id:i8, Key:(i8, {U:i8, V:r8}?)}*
**** New definitions: TB, type: {A:i8, B:(i8, {U:i8, V:r8}?)}*

> TA
TA : {Id:i8, Key:(i8, {U:i8, V:r8}?)}*
BndKind:Global, Type:{Id:i8, Key:(i8, {U:i8, V:r8}?)}*, Bnd:(Global(TA))
// (∂.TA:{Id:i8, Key:(i8, {U:i8, V:r8}?)}*) : {Id:i8, Key:(i8, {U:i8, V:r8}?)}*
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,(i8,{i8,r8})}>
      1) stloc.0 [Seq<{i8,(i8,{i8,r8})}>]
      1) ldloc.0 [Seq<{i8,(i8,{i8,r8})}>]
      1) ret
  Total Size: 11

Func sig: (TA:{Id:i8, Key:(i8, {U:i8, V:r8}?)}*) to {Id:i8, Key:(i8, {U:i8, V:r8}?)}*
Sequence: Seq<{i8,(i8,{i8,r8})}>
 0) { Id: 0, Key: (0, { U: 0, V: 0 }) }
 1) { Id: 1, Key: (1, { U: 1, V: 0.5 }) }
 2) { Id: 2, Key: (2, <null>) }
 3) { Id: 3, Key: (3, { U: 9, V: 13.5 }) }
 4) { Id: 4, Key: (4, { U: 16, V: 32 }) }
###
> TB
TB : {A:i8, B:(i8, {U:i8, V:r8}?)}*
BndKind:Global, Type:{A:i8, B:(i8, {U:i8, V:r8}?)}*, Bnd:(Global(TB))
// (∂.TB:{A:i8, B:(i8, {U:i8, V:r8}?)}*) : {A:i8, B:(i8, {U:i8, V:r8}?)}*
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,(i8,{i8,r8})}>
      1) stloc.0 [Seq<{i8,(i8,{i8,r8})}>]
      1) ldloc.0 [Seq<{i8,(i8,{i8,r8})}>]
      1) ret
  Total Size: 11

Func sig: (TB:{A:i8, B:(i8, {U:i8, V:r8}?)}*) to {A:i8, B:(i8, {U:i8, V:r8}?)}*
Sequence: Seq<{i8,(i8,{i8,r8})}>
 0) { A: 0, B: (0, { U: 0, V: 0 }) }
 1) { A: 1, B: (3, { U: 9, V: 13.5 }) }
 2) { A: 2, B: (1, { U: 1, V: 0.5 }) }
 3) { A: 3, B: (4, { U: 16, V: 32 }) }
 4) { A: 4, B: (2, <null>) }
 5) { A: 5, B: (0, { U: 0, V: 0 }) }
 6) { A: 6, B: (3, { U: 9, V: 13.5 }) }
 7) { A: 7, B: (1, { U: 1, V: 0.5 }) }
 8) { A: 8, B: (4, { U: 16, V: 32 }) }
 9) { A: 9, B: (2, <null>) }
10) { A: 10, B: (0, { U: 0, V: 0 }) }
11) { A: 11, B: (3, { U: 9, V: 13.5 }) }
12) { A: 12, B: (1, { U: 1, V: 0.5 }) }
13) { A: 13, B: (4, { U: 16, V: 32 }) }
14) { A: 14, B: (2, <null>) }
15) { A: 15, B: (0, { U: 0, V: 0 }) }
16) { A: 16, B: (3, { U: 9, V: 13.5 }) }
17) { A: 17, B: (1, { U: 1, V: 0.5 }) }
18) { A: 18, B: (4, { U: 16, V: 32 }) }
19) { A: 19, B: (2, <null>) }
###
> KeyJoin(b:TB, a:TA, B, Key, b+>{Id})
KeyJoin(b : TB, a : TA, B, Key, b+>{ Id }) : {A:i8, B:(i8, {U:i8, V:r8}?), Id:i8}*
BndKind:Call, Type:{A:i8, B:(i8, {U:i8, V:r8}?), Id:i8}*, Bnd:(Call(∂.KeyJoin([map:1] Global(TB), [map:2] Global(TA), GetField(Scope(1), B), GetField(Scope(2), Key), SetFields([with:3] Scope(1), Id : GetField(Scope(2), Id)))))
// (<ctx>, ∂.TB:{A:i8, B:(i8, {U:i8, V:r8}?)}*, ∂.TA:{Id:i8, Key:(i8, {U:i8, V:r8}?)}*) : {A:i8, B:(i8, {U:i8, V:r8}?), Id:i8}*
KeyJoin_2(Arr<obj>, {i8,(i8,{i8,r8})}):(i8,{i8,r8})
      1) ldarg.1 [{i8,(i8,{i8,r8})}]
      5) ldfld {i8,(i8,{i8,r8})}::_F1:(i8,{i8,r8})
      1) ret
  Total Size: 7

KeyJoin_3(Arr<obj>, {i8,(i8,{i8,r8})}):(i8,{i8,r8})
      1) ldarg.1 [{i8,(i8,{i8,r8})}]
      5) ldfld {i8,(i8,{i8,r8})}::_F1:(i8,{i8,r8})
      1) ret
  Total Size: 7

KeyJoin_4(Arr<obj>, {i8,(i8,{i8,r8})}, {i8,(i8,{i8,r8})}):{i8,(i8,{i8,r8}),i8}
      5) newobj {i8,(i8,{i8,r8}),i8}()
      1) dup
      1) ldc.i4.5
      5) stfld {i8,(i8,{i8,r8}),i8}::_B0:u1
      1) stloc.0 [{i8,(i8,{i8,r8}),i8}]
      1) ldloc.0 [{i8,(i8,{i8,r8}),i8}]
      1) ldarg.2 [{i8,(i8,{i8,r8})}]
      5) ldfld {i8,(i8,{i8,r8})}::_F0:i8
      5) stfld {i8,(i8,{i8,r8}),i8}::_F2:i8
      1) ldloc.0 [{i8,(i8,{i8,r8}),i8}]
      1) ldarg.1 [{i8,(i8,{i8,r8})}]
      5) ldfld {i8,(i8,{i8,r8})}::_F0:i8
      5) stfld {i8,(i8,{i8,r8}),i8}::_F0:i8
      1) ldarg.1 [{i8,(i8,{i8,r8})}]
      5) ldfld {i8,(i8,{i8,r8})}::_F1:(i8,{i8,r8})
      5) brfalse [0]
      1) ldloc.0 [{i8,(i8,{i8,r8}),i8}]
      1) dup
      1) dup
      5) ldfld {i8,(i8,{i8,r8}),i8}::_B0:u1
      1) ldc.i4.2
      1) or
      5) stfld {i8,(i8,{i8,r8}),i8}::_B0:u1
      1) ldarg.1 [{i8,(i8,{i8,r8})}]
      5) ldfld {i8,(i8,{i8,r8})}::_F1:(i8,{i8,r8})
      5) stfld {i8,(i8,{i8,r8}),i8}::_F1:(i8,{i8,r8})
  Label [0]:
      1) ldloc.0 [{i8,(i8,{i8,r8}),i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 89

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):ExecCtx
      1) stloc.0 [ExecCtx]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,(i8,{i8,r8})}>
      1) stloc.1 [Seq<{i8,(i8,{i8,r8})}>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.2
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,(i8,{i8,r8})}>
      1) stloc.2 [Seq<{i8,(i8,{i8,r8})}>]
      1) ldloc.1 [Seq<{i8,(i8,{i8,r8})}>]
      1) ldloc.2 [Seq<{i8,(i8,{i8,r8})}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<{i8,(i8,{i8,r8})},(i8,{i8,r8})>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [Func<{i8,(i8,{i8,r8})},(i8,{i8,r8})>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Func<{i8,(i8,{i8,r8})},{i8,(i8,{i8,r8})},{i8,(i8,{i8,r8}),i8}>]
      1) ldnull
      1) ldnull
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.3
      5) ldelem [EqualityComparer<(i8,{i8,r8})>]
      1) ldc.i4.1
      1) ldloc.0 [ExecCtx]
      1) ldc.i4.0
      5) call static KeyJoinGen::Exec(Seq<{i8,(i8,{i8,r8})}>, Seq<{i8,(i8,{i8,r8})}>, Func<{i8,(i8,{i8,r8})},(i8,{i8,r8})>, Func<{i8,(i8,{i8,r8})},(i8,{i8,r8})>, Func<{i8,(i8,{i8,r8})},{i8,(i8,{i8,r8})},{i8,(i8,{i8,r8}),i8}>, Func<{i8,(i8,{i8,r8})},{i8,(i8,{i8,r8}),i8}>, Func<{i8,(i8,{i8,r8})},{i8,(i8,{i8,r8}),i8}>, EqualityComparer<(i8,{i8,r8})>, bool, ExecCtx, i4):Seq<{i8,(i8,{i8,r8}),i8}>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<{i8,(i8,{i8,r8}),i8}>):Seq<{i8,(i8,{i8,r8}),i8}>
      1) ret
  Total Size: 73

Func sig: (<ctx>:x, TB:{A:i8, B:(i8, {U:i8, V:r8}?)}*, TA:{Id:i8, Key:(i8, {U:i8, V:r8}?)}*) to {A:i8, B:(i8, {U:i8, V:r8}?), Id:i8}*
Sequence: Seq<{i8,(i8,{i8,r8}),i8}>
 0) { A: 0, B: (0, { U: 0, V: 0 }), Id: 0 }
 1) { A: 1, B: (3, { U: 9, V: 13.5 }), Id: 3 }
 2) { A: 2, B: (1, { U: 1, V: 0.5 }), Id: 1 }
 3) { A: 3, B: (4, { U: 16, V: 32 }), Id: 4 }
 4) { A: 5, B: (0, { U: 0, V: 0 }), Id: 0 }
 5) { A: 6, B: (3, { U: 9, V: 13.5 }), Id: 3 }
 6) { A: 7, B: (1, { U: 1, V: 0.5 }), Id: 1 }
 7) { A: 8, B: (4, { U: 16, V: 32 }), Id: 4 }
 8) { A: 10, B: (0, { U: 0, V: 0 }), Id: 0 }
 9) { A: 11, B: (3, { U: 9, V: 13.5 }), Id: 3 }
10) { A: 12, B: (1, { U: 1, V: 0.5 }), Id: 1 }
11) { A: 13, B: (4, { U: 16, V: 32 }), Id: 4 }
12) { A: 15, B: (0, { U: 0, V: 0 }), Id: 0 }
13) { A: 16, B: (3, { U: 9, V: 13.5 }), Id: 3 }
14) { A: 17, B: (1, { U: 1, V: 0.5 }), Id: 1 }
15) { A: 18, B: (4, { U: 16, V: 32 }), Id: 4 }
*** Ctx ping count: 8
    [0:3](8=4+0+4): KeyJoin(*1: TB, *2: TA, *1.B, *2.Key, SetFields(!3: *1, Id : *2.Id))
###

**** New definitions: TA, type: {Id:i8, Key:U<Image>}*
**** New definitions: TB, type: {A:i8, B:U<Image>}*

> TA
TA : {Id:i8, Key:U<Image>}*
BndKind:Global, Type:{Id:i8, Key:U<Image>}*, Bnd:(Global(TA))
// (∂.TA:{Id:i8, Key:U<Image>}*) : {Id:i8, Key:U<Image>}*
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,Link}>
      1) stloc.0 [Seq<{i8,Link}>]
      1) ldloc.0 [Seq<{i8,Link}>]
      1) ret
  Total Size: 11

Func sig: (TA:{Id:i8, Key:U<Image>}*) to {Id:i8, Key:U<Image>}*
Sequence: Seq<{i8,Link}>
 0) { Id: 0, Key: Link<Generic>(<null>, X0.bmp) }
 1) { Id: 1, Key: Link<Generic>(<null>, X1.bmp) }
 2) { Id: 2, Key: Link<Generic>(<null>, X2.bmp) }
 3) { Id: 3, Key: Link<Generic>(<null>, X3.bmp) }
 4) { Id: 4, Key: Link<Generic>(<null>, X4.bmp) }
###
> TB
TB : {A:i8, B:U<Image>}*
BndKind:Global, Type:{A:i8, B:U<Image>}*, Bnd:(Global(TB))
// (∂.TB:{A:i8, B:U<Image>}*) : {A:i8, B:U<Image>}*
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,Link}>
      1) stloc.0 [Seq<{i8,Link}>]
      1) ldloc.0 [Seq<{i8,Link}>]
      1) ret
  Total Size: 11

Func sig: (TB:{A:i8, B:U<Image>}*) to {A:i8, B:U<Image>}*
Sequence: Seq<{i8,Link}>
 0) { A: 0, B: Link<Generic>(<null>, X0.bmp) }
 1) { A: 1, B: Link<Generic>(<null>, X3.bmp) }
 2) { A: 2, B: Link<Generic>(<null>, X1.bmp) }
 3) { A: 3, B: Link<Generic>(<null>, X4.bmp) }
 4) { A: 4, B: Link<Generic>(<null>, X2.bmp) }
 5) { A: 5, B: Link<Generic>(<null>, X0.bmp) }
 6) { A: 6, B: Link<Generic>(<null>, X3.bmp) }
 7) { A: 7, B: Link<Generic>(<null>, X1.bmp) }
 8) { A: 8, B: Link<Generic>(<null>, X4.bmp) }
 9) { A: 9, B: Link<Generic>(<null>, X2.bmp) }
10) { A: 10, B: Link<Generic>(<null>, X0.bmp) }
11) { A: 11, B: Link<Generic>(<null>, X3.bmp) }
12) { A: 12, B: Link<Generic>(<null>, X1.bmp) }
13) { A: 13, B: Link<Generic>(<null>, X4.bmp) }
14) { A: 14, B: Link<Generic>(<null>, X2.bmp) }
15) { A: 15, B: Link<Generic>(<null>, X0.bmp) }
16) { A: 16, B: Link<Generic>(<null>, X3.bmp) }
17) { A: 17, B: Link<Generic>(<null>, X1.bmp) }
18) { A: 18, B: Link<Generic>(<null>, X4.bmp) }
19) { A: 19, B: Link<Generic>(<null>, X2.bmp) }
###
> KeyJoin(b:TB, a:TA, B, Key, b+>{Id})
KeyJoin(b : TB, a : TA, B, Key, b+>{ Id }) : {A:i8, B:U<Image>, Id:i8}*
BndKind:Call, Type:{A:i8, B:U<Image>, Id:i8}*, Bnd:(Call(∂.KeyJoin([map:1] Global(TB), [map:2] Global(TA), GetField(Scope(1), B), GetField(Scope(2), Key), SetFields([with:3] Scope(1), Id : GetField(Scope(2), Id)))))
// (<ctx>, ∂.TB:{A:i8, B:U<Image>}*, ∂.TA:{Id:i8, Key:U<Image>}*) : {A:i8, B:U<Image>, Id:i8}*
KeyJoin_2(Arr<obj>, {i8,Link}):Link
      1) ldarg.1 [{i8,Link}]
      5) ldfld {i8,Link}::_F1:Link
      1) ret
  Total Size: 7

KeyJoin_3(Arr<obj>, {i8,Link}):Link
      1) ldarg.1 [{i8,Link}]
      5) ldfld {i8,Link}::_F1:Link
      1) ret
  Total Size: 7

KeyJoin_4(Arr<obj>, {i8,Link}, {i8,Link}):{i8,Link,i8}
      5) newobj {i8,Link,i8}()
      1) dup
      1) ldc.i4.7
      5) stfld {i8,Link,i8}::_B0:u1
      1) stloc.0 [{i8,Link,i8}]
      1) ldloc.0 [{i8,Link,i8}]
      1) ldarg.2 [{i8,Link}]
      5) ldfld {i8,Link}::_F0:i8
      5) stfld {i8,Link,i8}::_F2:i8
      1) ldloc.0 [{i8,Link,i8}]
      1) ldarg.1 [{i8,Link}]
      5) ldfld {i8,Link}::_F0:i8
      5) stfld {i8,Link,i8}::_F0:i8
      1) ldloc.0 [{i8,Link,i8}]
      1) ldarg.1 [{i8,Link}]
      5) ldfld {i8,Link}::_F1:Link
      5) stfld {i8,Link,i8}::_F1:Link
      1) ldloc.0 [{i8,Link,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 64

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):ExecCtx
      1) stloc.0 [ExecCtx]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,Link}>
      1) stloc.1 [Seq<{i8,Link}>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.2
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,Link}>
      1) stloc.2 [Seq<{i8,Link}>]
      1) ldloc.1 [Seq<{i8,Link}>]
      1) ldloc.2 [Seq<{i8,Link}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<{i8,Link},Link>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [Func<{i8,Link},Link>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Func<{i8,Link},{i8,Link},{i8,Link,i8}>]
      1) ldnull
      1) ldnull
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.3
      5) ldelem [EqualityComparer<Link>]
      1) ldc.i4.1
      1) ldloc.0 [ExecCtx]
      1) ldc.i4.0
      5) call static KeyJoinGen::Exec(Seq<{i8,Link}>, Seq<{i8,Link}>, Func<{i8,Link},Link>, Func<{i8,Link},Link>, Func<{i8,Link},{i8,Link},{i8,Link,i8}>, Func<{i8,Link},{i8,Link,i8}>, Func<{i8,Link},{i8,Link,i8}>, EqualityComparer<Link>, bool, ExecCtx, i4):Seq<{i8,Link,i8}>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<{i8,Link,i8}>):Seq<{i8,Link,i8}>
      1) ret
  Total Size: 73

Func sig: (<ctx>:x, TB:{A:i8, B:U<Image>}*, TA:{Id:i8, Key:U<Image>}*) to {A:i8, B:U<Image>, Id:i8}*
Sequence: Seq<{i8,Link,i8}>
 0) { A: 0, B: Link<Generic>(<null>, X0.bmp), Id: 0 }
 1) { A: 1, B: Link<Generic>(<null>, X3.bmp), Id: 3 }
 2) { A: 2, B: Link<Generic>(<null>, X1.bmp), Id: 1 }
 3) { A: 3, B: Link<Generic>(<null>, X4.bmp), Id: 4 }
 4) { A: 4, B: Link<Generic>(<null>, X2.bmp), Id: 2 }
 5) { A: 5, B: Link<Generic>(<null>, X0.bmp), Id: 0 }
 6) { A: 6, B: Link<Generic>(<null>, X3.bmp), Id: 3 }
 7) { A: 7, B: Link<Generic>(<null>, X1.bmp), Id: 1 }
 8) { A: 8, B: Link<Generic>(<null>, X4.bmp), Id: 4 }
 9) { A: 9, B: Link<Generic>(<null>, X2.bmp), Id: 2 }
10) { A: 10, B: Link<Generic>(<null>, X0.bmp), Id: 0 }
11) { A: 11, B: Link<Generic>(<null>, X3.bmp), Id: 3 }
12) { A: 12, B: Link<Generic>(<null>, X1.bmp), Id: 1 }
13) { A: 13, B: Link<Generic>(<null>, X4.bmp), Id: 4 }
14) { A: 14, B: Link<Generic>(<null>, X2.bmp), Id: 2 }
15) { A: 15, B: Link<Generic>(<null>, X0.bmp), Id: 0 }
16) { A: 16, B: Link<Generic>(<null>, X3.bmp), Id: 3 }
17) { A: 17, B: Link<Generic>(<null>, X1.bmp), Id: 1 }
18) { A: 18, B: Link<Generic>(<null>, X4.bmp), Id: 4 }
19) { A: 19, B: Link<Generic>(<null>, X2.bmp), Id: 2 }
*** Ctx ping count: 4
    [0:3](4=0+0+4): KeyJoin(*1: TB, *2: TA, *1.B, *2.Key, SetFields(!3: *1, Id : *2.Id))
###

**** New definitions: TA, type: {Id:i8, Key:U<Image>}*
**** New definitions: TB, type: {A:i8, B:U<Image>}*

> TA
TA : {Id:i8, Key:U<Image>}*
BndKind:Global, Type:{Id:i8, Key:U<Image>}*, Bnd:(Global(TA))
// (∂.TA:{Id:i8, Key:U<Image>}*) : {Id:i8, Key:U<Image>}*
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,Link}>
      1) stloc.0 [Seq<{i8,Link}>]
      1) ldloc.0 [Seq<{i8,Link}>]
      1) ret
  Total Size: 11

Func sig: (TA:{Id:i8, Key:U<Image>}*) to {Id:i8, Key:U<Image>}*
Sequence: Seq<{i8,Link}>
 0) { Id: 0, Key: Link<Generic>(<null>, X0.bmp) }
 1) { Id: 1, Key: Link<Generic>(<null>, X1.bmp) }
 2) { Id: 2, Key: <null> }
 3) { Id: 3, Key: Link<Generic>(<null>, X3.bmp) }
 4) { Id: 4, Key: Link<Generic>(<null>, X4.bmp) }
###
> TB
TB : {A:i8, B:U<Image>}*
BndKind:Global, Type:{A:i8, B:U<Image>}*, Bnd:(Global(TB))
// (∂.TB:{A:i8, B:U<Image>}*) : {A:i8, B:U<Image>}*
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,Link}>
      1) stloc.0 [Seq<{i8,Link}>]
      1) ldloc.0 [Seq<{i8,Link}>]
      1) ret
  Total Size: 11

Func sig: (TB:{A:i8, B:U<Image>}*) to {A:i8, B:U<Image>}*
Sequence: Seq<{i8,Link}>
 0) { A: 0, B: Link<Generic>(<null>, X0.bmp) }
 1) { A: 1, B: Link<Generic>(<null>, X3.bmp) }
 2) { A: 2, B: Link<Generic>(<null>, X1.bmp) }
 3) { A: 3, B: Link<Generic>(<null>, X4.bmp) }
 4) { A: 4, B: <null> }
 5) { A: 5, B: Link<Generic>(<null>, X0.bmp) }
 6) { A: 6, B: Link<Generic>(<null>, X3.bmp) }
 7) { A: 7, B: Link<Generic>(<null>, X1.bmp) }
 8) { A: 8, B: Link<Generic>(<null>, X4.bmp) }
 9) { A: 9, B: <null> }
10) { A: 10, B: Link<Generic>(<null>, X0.bmp) }
11) { A: 11, B: Link<Generic>(<null>, X3.bmp) }
12) { A: 12, B: Link<Generic>(<null>, X1.bmp) }
13) { A: 13, B: Link<Generic>(<null>, X4.bmp) }
14) { A: 14, B: <null> }
15) { A: 15, B: Link<Generic>(<null>, X0.bmp) }
16) { A: 16, B: Link<Generic>(<null>, X3.bmp) }
17) { A: 17, B: Link<Generic>(<null>, X1.bmp) }
18) { A: 18, B: Link<Generic>(<null>, X4.bmp) }
19) { A: 19, B: <null> }
###
> KeyJoin(b:TB, a:TA, B, Key, b+>{Id})
KeyJoin(b : TB, a : TA, B, Key, b+>{ Id }) : {A:i8, B:U<Image>, Id:i8}*
BndKind:Call, Type:{A:i8, B:U<Image>, Id:i8}*, Bnd:(Call(∂.KeyJoin([map:1] Global(TB), [map:2] Global(TA), GetField(Scope(1), B), GetField(Scope(2), Key), SetFields([with:3] Scope(1), Id : GetField(Scope(2), Id)))))
// (<ctx>, ∂.TB:{A:i8, B:U<Image>}*, ∂.TA:{Id:i8, Key:U<Image>}*) : {A:i8, B:U<Image>, Id:i8}*
KeyJoin_2(Arr<obj>, {i8,Link}):Link
      1) ldarg.1 [{i8,Link}]
      5) ldfld {i8,Link}::_F1:Link
      1) ret
  Total Size: 7

KeyJoin_3(Arr<obj>, {i8,Link}):Link
      1) ldarg.1 [{i8,Link}]
      5) ldfld {i8,Link}::_F1:Link
      1) ret
  Total Size: 7

KeyJoin_4(Arr<obj>, {i8,Link}, {i8,Link}):{i8,Link,i8}
      5) newobj {i8,Link,i8}()
      1) dup
      1) ldc.i4.7
      5) stfld {i8,Link,i8}::_B0:u1
      1) stloc.0 [{i8,Link,i8}]
      1) ldloc.0 [{i8,Link,i8}]
      1) ldarg.2 [{i8,Link}]
      5) ldfld {i8,Link}::_F0:i8
      5) stfld {i8,Link,i8}::_F2:i8
      1) ldloc.0 [{i8,Link,i8}]
      1) ldarg.1 [{i8,Link}]
      5) ldfld {i8,Link}::_F0:i8
      5) stfld {i8,Link,i8}::_F0:i8
      1) ldloc.0 [{i8,Link,i8}]
      1) ldarg.1 [{i8,Link}]
      5) ldfld {i8,Link}::_F1:Link
      5) stfld {i8,Link,i8}::_F1:Link
      1) ldloc.0 [{i8,Link,i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 64

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):ExecCtx
      1) stloc.0 [ExecCtx]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,Link}>
      1) stloc.1 [Seq<{i8,Link}>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.2
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,Link}>
      1) stloc.2 [Seq<{i8,Link}>]
      1) ldloc.1 [Seq<{i8,Link}>]
      1) ldloc.2 [Seq<{i8,Link}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<{i8,Link},Link>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [Func<{i8,Link},Link>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Func<{i8,Link},{i8,Link},{i8,Link,i8}>]
      1) ldnull
      1) ldnull
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.3
      5) ldelem [EqualityComparer<Link>]
      1) ldc.i4.1
      1) ldloc.0 [ExecCtx]
      1) ldc.i4.0
      5) call static KeyJoinGen::Exec(Seq<{i8,Link}>, Seq<{i8,Link}>, Func<{i8,Link},Link>, Func<{i8,Link},Link>, Func<{i8,Link},{i8,Link},{i8,Link,i8}>, Func<{i8,Link},{i8,Link,i8}>, Func<{i8,Link},{i8,Link,i8}>, EqualityComparer<Link>, bool, ExecCtx, i4):Seq<{i8,Link,i8}>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<{i8,Link,i8}>):Seq<{i8,Link,i8}>
      1) ret
  Total Size: 73

Func sig: (<ctx>:x, TB:{A:i8, B:U<Image>}*, TA:{Id:i8, Key:U<Image>}*) to {A:i8, B:U<Image>, Id:i8}*
Sequence: Seq<{i8,Link,i8}>
 0) { A: 0, B: Link<Generic>(<null>, X0.bmp), Id: 0 }
 1) { A: 1, B: Link<Generic>(<null>, X3.bmp), Id: 3 }
 2) { A: 2, B: Link<Generic>(<null>, X1.bmp), Id: 1 }
 3) { A: 3, B: Link<Generic>(<null>, X4.bmp), Id: 4 }
 4) { A: 5, B: Link<Generic>(<null>, X0.bmp), Id: 0 }
 5) { A: 6, B: Link<Generic>(<null>, X3.bmp), Id: 3 }
 6) { A: 7, B: Link<Generic>(<null>, X1.bmp), Id: 1 }
 7) { A: 8, B: Link<Generic>(<null>, X4.bmp), Id: 4 }
 8) { A: 10, B: Link<Generic>(<null>, X0.bmp), Id: 0 }
 9) { A: 11, B: Link<Generic>(<null>, X3.bmp), Id: 3 }
10) { A: 12, B: Link<Generic>(<null>, X1.bmp), Id: 1 }
11) { A: 13, B: Link<Generic>(<null>, X4.bmp), Id: 4 }
12) { A: 15, B: Link<Generic>(<null>, X0.bmp), Id: 0 }
13) { A: 16, B: Link<Generic>(<null>, X3.bmp), Id: 3 }
14) { A: 17, B: Link<Generic>(<null>, X1.bmp), Id: 1 }
15) { A: 18, B: Link<Generic>(<null>, X4.bmp), Id: 4 }
*** Ctx ping count: 8
    [0:3](8=4+0+4): KeyJoin(*1: TB, *2: TA, *1.B, *2.Key, SetFields(!3: *1, Id : *2.Id))
###

**** New definitions: TA, type: {Id:i8, Key:(i8, U<Image>)}*
**** New definitions: TB, type: {A:i8, B:(i8, U<Image>)}*

> TA
TA : {Id:i8, Key:(i8, U<Image>)}*
BndKind:Global, Type:{Id:i8, Key:(i8, U<Image>)}*, Bnd:(Global(TA))
// (∂.TA:{Id:i8, Key:(i8, U<Image>)}*) : {Id:i8, Key:(i8, U<Image>)}*
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,(i8,Link)}>
      1) stloc.0 [Seq<{i8,(i8,Link)}>]
      1) ldloc.0 [Seq<{i8,(i8,Link)}>]
      1) ret
  Total Size: 11

Func sig: (TA:{Id:i8, Key:(i8, U<Image>)}*) to {Id:i8, Key:(i8, U<Image>)}*
Sequence: Seq<{i8,(i8,Link)}>
 0) { Id: 0, Key: (0, Link<Generic>(<null>, X0.bmp)) }
 1) { Id: 1, Key: (1, Link<Generic>(<null>, X1.bmp)) }
 2) { Id: 2, Key: (4, Link<Generic>(<null>, X2.bmp)) }
 3) { Id: 3, Key: (9, Link<Generic>(<null>, X3.bmp)) }
 4) { Id: 4, Key: (16, Link<Generic>(<null>, X4.bmp)) }
###
> TB
TB : {A:i8, B:(i8, U<Image>)}*
BndKind:Global, Type:{A:i8, B:(i8, U<Image>)}*, Bnd:(Global(TB))
// (∂.TB:{A:i8, B:(i8, U<Image>)}*) : {A:i8, B:(i8, U<Image>)}*
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,(i8,Link)}>
      1) stloc.0 [Seq<{i8,(i8,Link)}>]
      1) ldloc.0 [Seq<{i8,(i8,Link)}>]
      1) ret
  Total Size: 11

Func sig: (TB:{A:i8, B:(i8, U<Image>)}*) to {A:i8, B:(i8, U<Image>)}*
Sequence: Seq<{i8,(i8,Link)}>
 0) { A: 0, B: (0, Link<Generic>(<null>, X0.bmp)) }
 1) { A: 1, B: (9, Link<Generic>(<null>, X3.bmp)) }
 2) { A: 2, B: (1, Link<Generic>(<null>, X1.bmp)) }
 3) { A: 3, B: (16, Link<Generic>(<null>, X4.bmp)) }
 4) { A: 4, B: (4, Link<Generic>(<null>, X2.bmp)) }
 5) { A: 5, B: (0, Link<Generic>(<null>, X0.bmp)) }
 6) { A: 6, B: (9, Link<Generic>(<null>, X3.bmp)) }
 7) { A: 7, B: (1, Link<Generic>(<null>, X1.bmp)) }
 8) { A: 8, B: (16, Link<Generic>(<null>, X4.bmp)) }
 9) { A: 9, B: (4, Link<Generic>(<null>, X2.bmp)) }
10) { A: 10, B: (0, Link<Generic>(<null>, X0.bmp)) }
11) { A: 11, B: (9, Link<Generic>(<null>, X3.bmp)) }
12) { A: 12, B: (1, Link<Generic>(<null>, X1.bmp)) }
13) { A: 13, B: (16, Link<Generic>(<null>, X4.bmp)) }
14) { A: 14, B: (4, Link<Generic>(<null>, X2.bmp)) }
15) { A: 15, B: (0, Link<Generic>(<null>, X0.bmp)) }
16) { A: 16, B: (9, Link<Generic>(<null>, X3.bmp)) }
17) { A: 17, B: (1, Link<Generic>(<null>, X1.bmp)) }
18) { A: 18, B: (16, Link<Generic>(<null>, X4.bmp)) }
19) { A: 19, B: (4, Link<Generic>(<null>, X2.bmp)) }
###
> KeyJoin(b:TB, a:TA, B, Key, b+>{Id})
KeyJoin(b : TB, a : TA, B, Key, b+>{ Id }) : {A:i8, B:(i8, U<Image>), Id:i8}*
BndKind:Call, Type:{A:i8, B:(i8, U<Image>), Id:i8}*, Bnd:(Call(∂.KeyJoin([map:1] Global(TB), [map:2] Global(TA), GetField(Scope(1), B), GetField(Scope(2), Key), SetFields([with:3] Scope(1), Id : GetField(Scope(2), Id)))))
// (<ctx>, ∂.TB:{A:i8, B:(i8, U<Image>)}*, ∂.TA:{Id:i8, Key:(i8, U<Image>)}*) : {A:i8, B:(i8, U<Image>), Id:i8}*
KeyJoin_2(Arr<obj>, {i8,(i8,Link)}):(i8,Link)
      1) ldarg.1 [{i8,(i8,Link)}]
      5) ldfld {i8,(i8,Link)}::_F1:(i8,Link)
      1) ret
  Total Size: 7

KeyJoin_3(Arr<obj>, {i8,(i8,Link)}):(i8,Link)
      1) ldarg.1 [{i8,(i8,Link)}]
      5) ldfld {i8,(i8,Link)}::_F1:(i8,Link)
      1) ret
  Total Size: 7

KeyJoin_4(Arr<obj>, {i8,(i8,Link)}, {i8,(i8,Link)}):{i8,(i8,Link),i8}
      5) newobj {i8,(i8,Link),i8}()
      1) dup
      1) ldc.i4.5
      5) stfld {i8,(i8,Link),i8}::_B0:u1
      1) stloc.0 [{i8,(i8,Link),i8}]
      1) ldloc.0 [{i8,(i8,Link),i8}]
      1) ldarg.2 [{i8,(i8,Link)}]
      5) ldfld {i8,(i8,Link)}::_F0:i8
      5) stfld {i8,(i8,Link),i8}::_F2:i8
      1) ldloc.0 [{i8,(i8,Link),i8}]
      1) ldarg.1 [{i8,(i8,Link)}]
      5) ldfld {i8,(i8,Link)}::_F0:i8
      5) stfld {i8,(i8,Link),i8}::_F0:i8
      1) ldarg.1 [{i8,(i8,Link)}]
      5) ldfld {i8,(i8,Link)}::_F1:(i8,Link)
      5) brfalse [0]
      1) ldloc.0 [{i8,(i8,Link),i8}]
      1) dup
      1) dup
      5) ldfld {i8,(i8,Link),i8}::_B0:u1
      1) ldc.i4.2
      1) or
      5) stfld {i8,(i8,Link),i8}::_B0:u1
      1) ldarg.1 [{i8,(i8,Link)}]
      5) ldfld {i8,(i8,Link)}::_F1:(i8,Link)
      5) stfld {i8,(i8,Link),i8}::_F1:(i8,Link)
  Label [0]:
      1) ldloc.0 [{i8,(i8,Link),i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 89

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):ExecCtx
      1) stloc.0 [ExecCtx]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,(i8,Link)}>
      1) stloc.1 [Seq<{i8,(i8,Link)}>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.2
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,(i8,Link)}>
      1) stloc.2 [Seq<{i8,(i8,Link)}>]
      1) ldloc.1 [Seq<{i8,(i8,Link)}>]
      1) ldloc.2 [Seq<{i8,(i8,Link)}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<{i8,(i8,Link)},(i8,Link)>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [Func<{i8,(i8,Link)},(i8,Link)>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Func<{i8,(i8,Link)},{i8,(i8,Link)},{i8,(i8,Link),i8}>]
      1) ldnull
      1) ldnull
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.3
      5) ldelem [EqualityComparer<(i8,Link)>]
      1) ldc.i4.1
      1) ldloc.0 [ExecCtx]
      1) ldc.i4.0
      5) call static KeyJoinGen::Exec(Seq<{i8,(i8,Link)}>, Seq<{i8,(i8,Link)}>, Func<{i8,(i8,Link)},(i8,Link)>, Func<{i8,(i8,Link)},(i8,Link)>, Func<{i8,(i8,Link)},{i8,(i8,Link)},{i8,(i8,Link),i8}>, Func<{i8,(i8,Link)},{i8,(i8,Link),i8}>, Func<{i8,(i8,Link)},{i8,(i8,Link),i8}>, EqualityComparer<(i8,Link)>, bool, ExecCtx, i4):Seq<{i8,(i8,Link),i8}>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<{i8,(i8,Link),i8}>):Seq<{i8,(i8,Link),i8}>
      1) ret
  Total Size: 73

Func sig: (<ctx>:x, TB:{A:i8, B:(i8, U<Image>)}*, TA:{Id:i8, Key:(i8, U<Image>)}*) to {A:i8, B:(i8, U<Image>), Id:i8}*
Sequence: Seq<{i8,(i8,Link),i8}>
 0) { A: 0, B: (0, Link<Generic>(<null>, X0.bmp)), Id: 0 }
 1) { A: 1, B: (9, Link<Generic>(<null>, X3.bmp)), Id: 3 }
 2) { A: 2, B: (1, Link<Generic>(<null>, X1.bmp)), Id: 1 }
 3) { A: 3, B: (16, Link<Generic>(<null>, X4.bmp)), Id: 4 }
 4) { A: 4, B: (4, Link<Generic>(<null>, X2.bmp)), Id: 2 }
 5) { A: 5, B: (0, Link<Generic>(<null>, X0.bmp)), Id: 0 }
 6) { A: 6, B: (9, Link<Generic>(<null>, X3.bmp)), Id: 3 }
 7) { A: 7, B: (1, Link<Generic>(<null>, X1.bmp)), Id: 1 }
 8) { A: 8, B: (16, Link<Generic>(<null>, X4.bmp)), Id: 4 }
 9) { A: 9, B: (4, Link<Generic>(<null>, X2.bmp)), Id: 2 }
10) { A: 10, B: (0, Link<Generic>(<null>, X0.bmp)), Id: 0 }
11) { A: 11, B: (9, Link<Generic>(<null>, X3.bmp)), Id: 3 }
12) { A: 12, B: (1, Link<Generic>(<null>, X1.bmp)), Id: 1 }
13) { A: 13, B: (16, Link<Generic>(<null>, X4.bmp)), Id: 4 }
14) { A: 14, B: (4, Link<Generic>(<null>, X2.bmp)), Id: 2 }
15) { A: 15, B: (0, Link<Generic>(<null>, X0.bmp)), Id: 0 }
16) { A: 16, B: (9, Link<Generic>(<null>, X3.bmp)), Id: 3 }
17) { A: 17, B: (1, Link<Generic>(<null>, X1.bmp)), Id: 1 }
18) { A: 18, B: (16, Link<Generic>(<null>, X4.bmp)), Id: 4 }
19) { A: 19, B: (4, Link<Generic>(<null>, X2.bmp)), Id: 2 }
*** Ctx ping count: 4
    [0:3](4=0+0+4): KeyJoin(*1: TB, *2: TA, *1.B, *2.Key, SetFields(!3: *1, Id : *2.Id))
###

**** New definitions: TA, type: {Id:i8, Key:(i8, U<Image>)}*
**** New definitions: TB, type: {A:i8, B:(i8, U<Image>)}*

> TA
TA : {Id:i8, Key:(i8, U<Image>)}*
BndKind:Global, Type:{Id:i8, Key:(i8, U<Image>)}*, Bnd:(Global(TA))
// (∂.TA:{Id:i8, Key:(i8, U<Image>)}*) : {Id:i8, Key:(i8, U<Image>)}*
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,(i8,Link)}>
      1) stloc.0 [Seq<{i8,(i8,Link)}>]
      1) ldloc.0 [Seq<{i8,(i8,Link)}>]
      1) ret
  Total Size: 11

Func sig: (TA:{Id:i8, Key:(i8, U<Image>)}*) to {Id:i8, Key:(i8, U<Image>)}*
Sequence: Seq<{i8,(i8,Link)}>
 0) { Id: 0, Key: (0, Link<Generic>(<null>, X0.bmp)) }
 1) { Id: 1, Key: (1, Link<Generic>(<null>, X1.bmp)) }
 2) { Id: 2, Key: (4, <null>) }
 3) { Id: 3, Key: (9, Link<Generic>(<null>, X3.bmp)) }
 4) { Id: 4, Key: (16, Link<Generic>(<null>, X4.bmp)) }
###
> TB
TB : {A:i8, B:(i8, U<Image>)}*
BndKind:Global, Type:{A:i8, B:(i8, U<Image>)}*, Bnd:(Global(TB))
// (∂.TB:{A:i8, B:(i8, U<Image>)}*) : {A:i8, B:(i8, U<Image>)}*
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,(i8,Link)}>
      1) stloc.0 [Seq<{i8,(i8,Link)}>]
      1) ldloc.0 [Seq<{i8,(i8,Link)}>]
      1) ret
  Total Size: 11

Func sig: (TB:{A:i8, B:(i8, U<Image>)}*) to {A:i8, B:(i8, U<Image>)}*
Sequence: Seq<{i8,(i8,Link)}>
 0) { A: 0, B: (0, Link<Generic>(<null>, X0.bmp)) }
 1) { A: 1, B: (9, Link<Generic>(<null>, X3.bmp)) }
 2) { A: 2, B: (1, Link<Generic>(<null>, X1.bmp)) }
 3) { A: 3, B: (16, Link<Generic>(<null>, X4.bmp)) }
 4) { A: 4, B: (4, <null>) }
 5) { A: 5, B: (0, Link<Generic>(<null>, X0.bmp)) }
 6) { A: 6, B: (9, Link<Generic>(<null>, X3.bmp)) }
 7) { A: 7, B: (1, Link<Generic>(<null>, X1.bmp)) }
 8) { A: 8, B: (16, Link<Generic>(<null>, X4.bmp)) }
 9) { A: 9, B: (4, <null>) }
10) { A: 10, B: (0, Link<Generic>(<null>, X0.bmp)) }
11) { A: 11, B: (9, Link<Generic>(<null>, X3.bmp)) }
12) { A: 12, B: (1, Link<Generic>(<null>, X1.bmp)) }
13) { A: 13, B: (16, Link<Generic>(<null>, X4.bmp)) }
14) { A: 14, B: (4, <null>) }
15) { A: 15, B: (0, Link<Generic>(<null>, X0.bmp)) }
16) { A: 16, B: (9, Link<Generic>(<null>, X3.bmp)) }
17) { A: 17, B: (1, Link<Generic>(<null>, X1.bmp)) }
18) { A: 18, B: (16, Link<Generic>(<null>, X4.bmp)) }
19) { A: 19, B: (4, <null>) }
###
> KeyJoin(b:TB, a:TA, B, Key, b+>{Id})
KeyJoin(b : TB, a : TA, B, Key, b+>{ Id }) : {A:i8, B:(i8, U<Image>), Id:i8}*
BndKind:Call, Type:{A:i8, B:(i8, U<Image>), Id:i8}*, Bnd:(Call(∂.KeyJoin([map:1] Global(TB), [map:2] Global(TA), GetField(Scope(1), B), GetField(Scope(2), Key), SetFields([with:3] Scope(1), Id : GetField(Scope(2), Id)))))
// (<ctx>, ∂.TB:{A:i8, B:(i8, U<Image>)}*, ∂.TA:{Id:i8, Key:(i8, U<Image>)}*) : {A:i8, B:(i8, U<Image>), Id:i8}*
KeyJoin_2(Arr<obj>, {i8,(i8,Link)}):(i8,Link)
      1) ldarg.1 [{i8,(i8,Link)}]
      5) ldfld {i8,(i8,Link)}::_F1:(i8,Link)
      1) ret
  Total Size: 7

KeyJoin_3(Arr<obj>, {i8,(i8,Link)}):(i8,Link)
      1) ldarg.1 [{i8,(i8,Link)}]
      5) ldfld {i8,(i8,Link)}::_F1:(i8,Link)
      1) ret
  Total Size: 7

KeyJoin_4(Arr<obj>, {i8,(i8,Link)}, {i8,(i8,Link)}):{i8,(i8,Link),i8}
      5) newobj {i8,(i8,Link),i8}()
      1) dup
      1) ldc.i4.5
      5) stfld {i8,(i8,Link),i8}::_B0:u1
      1) stloc.0 [{i8,(i8,Link),i8}]
      1) ldloc.0 [{i8,(i8,Link),i8}]
      1) ldarg.2 [{i8,(i8,Link)}]
      5) ldfld {i8,(i8,Link)}::_F0:i8
      5) stfld {i8,(i8,Link),i8}::_F2:i8
      1) ldloc.0 [{i8,(i8,Link),i8}]
      1) ldarg.1 [{i8,(i8,Link)}]
      5) ldfld {i8,(i8,Link)}::_F0:i8
      5) stfld {i8,(i8,Link),i8}::_F0:i8
      1) ldarg.1 [{i8,(i8,Link)}]
      5) ldfld {i8,(i8,Link)}::_F1:(i8,Link)
      5) brfalse [0]
      1) ldloc.0 [{i8,(i8,Link),i8}]
      1) dup
      1) dup
      5) ldfld {i8,(i8,Link),i8}::_B0:u1
      1) ldc.i4.2
      1) or
      5) stfld {i8,(i8,Link),i8}::_B0:u1
      1) ldarg.1 [{i8,(i8,Link)}]
      5) ldfld {i8,(i8,Link)}::_F1:(i8,Link)
      5) stfld {i8,(i8,Link),i8}::_F1:(i8,Link)
  Label [0]:
      1) ldloc.0 [{i8,(i8,Link),i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 89

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):ExecCtx
      1) stloc.0 [ExecCtx]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,(i8,Link)}>
      1) stloc.1 [Seq<{i8,(i8,Link)}>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.2
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,(i8,Link)}>
      1) stloc.2 [Seq<{i8,(i8,Link)}>]
      1) ldloc.1 [Seq<{i8,(i8,Link)}>]
      1) ldloc.2 [Seq<{i8,(i8,Link)}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<{i8,(i8,Link)},(i8,Link)>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [Func<{i8,(i8,Link)},(i8,Link)>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Func<{i8,(i8,Link)},{i8,(i8,Link)},{i8,(i8,Link),i8}>]
      1) ldnull
      1) ldnull
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.3
      5) ldelem [EqualityComparer<(i8,Link)>]
      1) ldc.i4.1
      1) ldloc.0 [ExecCtx]
      1) ldc.i4.0
      5) call static KeyJoinGen::Exec(Seq<{i8,(i8,Link)}>, Seq<{i8,(i8,Link)}>, Func<{i8,(i8,Link)},(i8,Link)>, Func<{i8,(i8,Link)},(i8,Link)>, Func<{i8,(i8,Link)},{i8,(i8,Link)},{i8,(i8,Link),i8}>, Func<{i8,(i8,Link)},{i8,(i8,Link),i8}>, Func<{i8,(i8,Link)},{i8,(i8,Link),i8}>, EqualityComparer<(i8,Link)>, bool, ExecCtx, i4):Seq<{i8,(i8,Link),i8}>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<{i8,(i8,Link),i8}>):Seq<{i8,(i8,Link),i8}>
      1) ret
  Total Size: 73

Func sig: (<ctx>:x, TB:{A:i8, B:(i8, U<Image>)}*, TA:{Id:i8, Key:(i8, U<Image>)}*) to {A:i8, B:(i8, U<Image>), Id:i8}*
Sequence: Seq<{i8,(i8,Link),i8}>
 0) { A: 0, B: (0, Link<Generic>(<null>, X0.bmp)), Id: 0 }
 1) { A: 1, B: (9, Link<Generic>(<null>, X3.bmp)), Id: 3 }
 2) { A: 2, B: (1, Link<Generic>(<null>, X1.bmp)), Id: 1 }
 3) { A: 3, B: (16, Link<Generic>(<null>, X4.bmp)), Id: 4 }
 4) { A: 5, B: (0, Link<Generic>(<null>, X0.bmp)), Id: 0 }
 5) { A: 6, B: (9, Link<Generic>(<null>, X3.bmp)), Id: 3 }
 6) { A: 7, B: (1, Link<Generic>(<null>, X1.bmp)), Id: 1 }
 7) { A: 8, B: (16, Link<Generic>(<null>, X4.bmp)), Id: 4 }
 8) { A: 10, B: (0, Link<Generic>(<null>, X0.bmp)), Id: 0 }
 9) { A: 11, B: (9, Link<Generic>(<null>, X3.bmp)), Id: 3 }
10) { A: 12, B: (1, Link<Generic>(<null>, X1.bmp)), Id: 1 }
11) { A: 13, B: (16, Link<Generic>(<null>, X4.bmp)), Id: 4 }
12) { A: 15, B: (0, Link<Generic>(<null>, X0.bmp)), Id: 0 }
13) { A: 16, B: (9, Link<Generic>(<null>, X3.bmp)), Id: 3 }
14) { A: 17, B: (1, Link<Generic>(<null>, X1.bmp)), Id: 1 }
15) { A: 18, B: (16, Link<Generic>(<null>, X4.bmp)), Id: 4 }
*** Ctx ping count: 8
    [0:3](8=4+0+4): KeyJoin(*1: TB, *2: TA, *1.B, *2.Key, SetFields(!3: *1, Id : *2.Id))
###

**** New definitions: TA, type: {Id:i8, Key:{A:i8, B:i8, C:i8, D:i8, E:i8, F:i8, G:i8, H:i8, I:i8}}*
**** New definitions: TB, type: {A:i8, B:{A:i8, B:i8, C:i8, D:i8, E:i8, F:i8, G:i8, H:i8, I:i8}}*

> TA
TA : {Id:i8, Key:{A:i8, B:i8, C:i8, D:i8, E:i8, F:i8, G:i8, H:i8, I:i8}}*
BndKind:Global, Type:{Id:i8, Key:{A:i8, B:i8, C:i8, D:i8, E:i8, F:i8, G:i8, H:i8, I:i8}}*, Bnd:(Global(TA))
// (∂.TA:{Id:i8, Key:{A:i8, B:i8, C:i8, D:i8, E:i8, F:i8, G:i8, H:i8, I:i8}}*) : {Id:i8, Key:{A:i8, B:i8, C:i8, D:i8, E:i8, F:i8, G:i8, H:i8, I:i8}}*
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8}}>
      1) stloc.0 [Seq<{i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8}}>]
      1) ldloc.0 [Seq<{i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8}}>]
      1) ret
  Total Size: 11

Func sig: (TA:{Id:i8, Key:{A:i8, B:i8, C:i8, D:i8, E:i8, F:i8, G:i8, H:i8, I:i8}}*) to {Id:i8, Key:{A:i8, B:i8, C:i8, D:i8, E:i8, F:i8, G:i8, H:i8, I:i8}}*
Sequence: Seq<{i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8}}>
 0) { Id: 0, Key: { A: 0, B: 0, C: 0, D: 0, E: 0, F: 0, G: 0, H: 0, I: 0 } }
 1) { Id: 1, Key: { A: 1, B: 1, C: 1, D: 1, E: 1, F: 1, G: 1, H: 1, I: 1 } }
 2) { Id: 2, Key: { A: 2, B: 2, C: 2, D: 2, E: 2, F: 2, G: 2, H: 2, I: 2 } }
 3) { Id: 3, Key: { A: 3, B: 3, C: 3, D: 3, E: 3, F: 3, G: 3, H: 3, I: 3 } }
 4) { Id: 4, Key: { A: 4, B: 4, C: 4, D: 4, E: 4, F: 4, G: 4, H: 4, I: 4 } }
###
> TB
TB : {A:i8, B:{A:i8, B:i8, C:i8, D:i8, E:i8, F:i8, G:i8, H:i8, I:i8}}*
BndKind:Global, Type:{A:i8, B:{A:i8, B:i8, C:i8, D:i8, E:i8, F:i8, G:i8, H:i8, I:i8}}*, Bnd:(Global(TB))
// (∂.TB:{A:i8, B:{A:i8, B:i8, C:i8, D:i8, E:i8, F:i8, G:i8, H:i8, I:i8}}*) : {A:i8, B:{A:i8, B:i8, C:i8, D:i8, E:i8, F:i8, G:i8, H:i8, I:i8}}*
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8}}>
      1) stloc.0 [Seq<{i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8}}>]
      1) ldloc.0 [Seq<{i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8}}>]
      1) ret
  Total Size: 11

Func sig: (TB:{A:i8, B:{A:i8, B:i8, C:i8, D:i8, E:i8, F:i8, G:i8, H:i8, I:i8}}*) to {A:i8, B:{A:i8, B:i8, C:i8, D:i8, E:i8, F:i8, G:i8, H:i8, I:i8}}*
Sequence: Seq<{i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8}}>
 0) { A: 0, B: { A: 0, B: 0, C: 0, D: 0, E: 0, F: 0, G: 0, H: 0, I: 0 } }
 1) { A: 1, B: { A: 3, B: 3, C: 3, D: 3, E: 3, F: 3, G: 3, H: 3, I: 3 } }
 2) { A: 2, B: { A: 1, B: 1, C: 1, D: 1, E: 1, F: 1, G: 1, H: 1, I: 1 } }
 3) { A: 3, B: { A: 4, B: 4, C: 4, D: 4, E: 4, F: 4, G: 4, H: 4, I: 4 } }
 4) { A: 4, B: { A: 2, B: 2, C: 2, D: 2, E: 2, F: 2, G: 2, H: 2, I: 2 } }
 5) { A: 5, B: { A: 0, B: 0, C: 0, D: 0, E: 0, F: 0, G: 0, H: 0, I: 0 } }
 6) { A: 6, B: { A: 3, B: 3, C: 3, D: 3, E: 3, F: 3, G: 3, H: 3, I: 3 } }
 7) { A: 7, B: { A: 1, B: 1, C: 1, D: 1, E: 1, F: 1, G: 1, H: 1, I: 1 } }
 8) { A: 8, B: { A: 4, B: 4, C: 4, D: 4, E: 4, F: 4, G: 4, H: 4, I: 4 } }
 9) { A: 9, B: { A: 2, B: 2, C: 2, D: 2, E: 2, F: 2, G: 2, H: 2, I: 2 } }
10) { A: 10, B: { A: 0, B: 0, C: 0, D: 0, E: 0, F: 0, G: 0, H: 0, I: 0 } }
11) { A: 11, B: { A: 3, B: 3, C: 3, D: 3, E: 3, F: 3, G: 3, H: 3, I: 3 } }
12) { A: 12, B: { A: 1, B: 1, C: 1, D: 1, E: 1, F: 1, G: 1, H: 1, I: 1 } }
13) { A: 13, B: { A: 4, B: 4, C: 4, D: 4, E: 4, F: 4, G: 4, H: 4, I: 4 } }
14) { A: 14, B: { A: 2, B: 2, C: 2, D: 2, E: 2, F: 2, G: 2, H: 2, I: 2 } }
15) { A: 15, B: { A: 0, B: 0, C: 0, D: 0, E: 0, F: 0, G: 0, H: 0, I: 0 } }
16) { A: 16, B: { A: 3, B: 3, C: 3, D: 3, E: 3, F: 3, G: 3, H: 3, I: 3 } }
17) { A: 17, B: { A: 1, B: 1, C: 1, D: 1, E: 1, F: 1, G: 1, H: 1, I: 1 } }
18) { A: 18, B: { A: 4, B: 4, C: 4, D: 4, E: 4, F: 4, G: 4, H: 4, I: 4 } }
19) { A: 19, B: { A: 2, B: 2, C: 2, D: 2, E: 2, F: 2, G: 2, H: 2, I: 2 } }
###
> KeyJoin(b:TB, a:TA, B, Key, b+>{Id})
KeyJoin(b : TB, a : TA, B, Key, b+>{ Id }) : {A:i8, B:{A:i8, B:i8, C:i8, D:i8, E:i8, F:i8, G:i8, H:i8, I:i8}, Id:i8}*
BndKind:Call, Type:{A:i8, B:{A:i8, B:i8, C:i8, D:i8, E:i8, F:i8, G:i8, H:i8, I:i8}, Id:i8}*, Bnd:(Call(∂.KeyJoin([map:1] Global(TB), [map:2] Global(TA), GetField(Scope(1), B), GetField(Scope(2), Key), SetFields([with:3] Scope(1), Id : GetField(Scope(2), Id)))))
// (<ctx>, ∂.TB:{A:i8, B:{A:i8, B:i8, C:i8, D:i8, E:i8, F:i8, G:i8, H:i8, I:i8}}*, ∂.TA:{Id:i8, Key:{A:i8, B:i8, C:i8, D:i8, E:i8, F:i8, G:i8, H:i8, I:i8}}*) : {A:i8, B:{A:i8, B:i8, C:i8, D:i8, E:i8, F:i8, G:i8, H:i8, I:i8}, Id:i8}*
KeyJoin_2(Arr<obj>, {i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8}}):{i8,i8,i8,i8,i8,i8,i8,i8,i8}
      1) ldarg.1 [{i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8}}]
      5) ldfld {i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8}}::_F1:{i8,i8,i8,i8,i8,i8,i8,i8,i8}
      1) ret
  Total Size: 7

KeyJoin_3(Arr<obj>, {i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8}}):{i8,i8,i8,i8,i8,i8,i8,i8,i8}
      1) ldarg.1 [{i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8}}]
      5) ldfld {i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8}}::_F1:{i8,i8,i8,i8,i8,i8,i8,i8,i8}
      1) ret
  Total Size: 7

KeyJoin_4(Arr<obj>, {i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8}}, {i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8}}):{i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8},i8}
      5) newobj {i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8},i8}()
      1) dup
      1) ldc.i4.5
      5) stfld {i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8},i8}::_B0:u1
      1) stloc.0 [{i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8},i8}]
      1) ldloc.0 [{i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8},i8}]
      1) ldarg.2 [{i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8}}]
      5) ldfld {i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8}}::_F0:i8
      5) stfld {i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8},i8}::_F2:i8
      1) ldloc.0 [{i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8},i8}]
      1) ldarg.1 [{i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8}}]
      5) ldfld {i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8}}::_F0:i8
      5) stfld {i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8},i8}::_F0:i8
      1) ldarg.1 [{i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8}}]
      5) ldfld {i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8}}::_F1:{i8,i8,i8,i8,i8,i8,i8,i8,i8}
      5) brfalse [0]
      1) ldloc.0 [{i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8},i8}]
      1) dup
      1) dup
      5) ldfld {i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8},i8}::_B0:u1
      1) ldc.i4.2
      1) or
      5) stfld {i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8},i8}::_B0:u1
      1) ldarg.1 [{i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8}}]
      5) ldfld {i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8}}::_F1:{i8,i8,i8,i8,i8,i8,i8,i8,i8}
      5) stfld {i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8},i8}::_F1:{i8,i8,i8,i8,i8,i8,i8,i8,i8}
  Label [0]:
      1) ldloc.0 [{i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8},i8}]
      1) dup
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [RecordRuntimeTypeInfo]
      5) stfld {}::_rrti:RecordRuntimeTypeInfo
      1) ret
  Total Size: 89

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):ExecCtx
      1) stloc.0 [ExecCtx]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8}}>
      1) stloc.1 [Seq<{i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8}}>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.2
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<{i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8}}>
      1) stloc.2 [Seq<{i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8}}>]
      1) ldloc.1 [Seq<{i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8}}>]
      1) ldloc.2 [Seq<{i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8}}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<{i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8}},{i8,i8,i8,i8,i8,i8,i8,i8,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.1
      5) ldelem [Func<{i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8}},{i8,i8,i8,i8,i8,i8,i8,i8,i8}>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.2
      5) ldelem [Func<{i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8}},{i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8}},{i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8},i8}>]
      1) ldnull
      1) ldnull
      1) ldnull
      1) ldc.i4.0
      1) ldloc.0 [ExecCtx]
      1) ldc.i4.0
      5) call static KeyJoinGen::Exec(Seq<{i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8}}>, Seq<{i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8}}>, Func<{i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8}},{i8,i8,i8,i8,i8,i8,i8,i8,i8}>, Func<{i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8}},{i8,i8,i8,i8,i8,i8,i8,i8,i8}>, Func<{i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8}},{i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8}},{i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8},i8}>, Func<{i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8}},{i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8},i8}>, Func<{i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8}},{i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8},i8}>, EqualityComparer<{i8,i8,i8,i8,i8,i8,i8,i8,i8}>, bool, ExecCtx, i4):Seq<{i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8},i8}>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<{i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8},i8}>):Seq<{i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8},i8}>
      1) ret
  Total Size: 67

Func sig: (<ctx>:x, TB:{A:i8, B:{A:i8, B:i8, C:i8, D:i8, E:i8, F:i8, G:i8, H:i8, I:i8}}*, TA:{Id:i8, Key:{A:i8, B:i8, C:i8, D:i8, E:i8, F:i8, G:i8, H:i8, I:i8}}*) to {A:i8, B:{A:i8, B:i8, C:i8, D:i8, E:i8, F:i8, G:i8, H:i8, I:i8}, Id:i8}*
Sequence: Seq<{i8,{i8,i8,i8,i8,i8,i8,i8,i8,i8},i8}>
 0) { A: 0, B: { A: 0, B: 0, C: 0, D: 0, E: 0, F: 0, G: 0, H: 0, I: 0 }, Id: 0 }
 1) { A: 1, B: { A: 3, B: 3, C: 3, D: 3, E: 3, F: 3, G: 3, H: 3, I: 3 }, Id: 3 }
 2) { A: 2, B: { A: 1, B: 1, C: 1, D: 1, E: 1, F: 1, G: 1, H: 1, I: 1 }, Id: 1 }
 3) { A: 3, B: { A: 4, B: 4, C: 4, D: 4, E: 4, F: 4, G: 4, H: 4, I: 4 }, Id: 4 }
 4) { A: 4, B: { A: 2, B: 2, C: 2, D: 2, E: 2, F: 2, G: 2, H: 2, I: 2 }, Id: 2 }
 5) { A: 5, B: { A: 0, B: 0, C: 0, D: 0, E: 0, F: 0, G: 0, H: 0, I: 0 }, Id: 0 }
 6) { A: 6, B: { A: 3, B: 3, C: 3, D: 3, E: 3, F: 3, G: 3, H: 3, I: 3 }, Id: 3 }
 7) { A: 7, B: { A: 1, B: 1, C: 1, D: 1, E: 1, F: 1, G: 1, H: 1, I: 1 }, Id: 1 }
 8) { A: 8, B: { A: 4, B: 4, C: 4, D: 4, E: 4, F: 4, G: 4, H: 4, I: 4 }, Id: 4 }
 9) { A: 9, B: { A: 2, B: 2, C: 2, D: 2, E: 2, F: 2, G: 2, H: 2, I: 2 }, Id: 2 }
10) { A: 10, B: { A: 0, B: 0, C: 0, D: 0, E: 0, F: 0, G: 0, H: 0, I: 0 }, Id: 0 }
11) { A: 11, B: { A: 3, B: 3, C: 3, D: 3, E: 3, F: 3, G: 3, H: 3, I: 3 }, Id: 3 }
12) { A: 12, B: { A: 1, B: 1, C: 1, D: 1, E: 1, F: 1, G: 1, H: 1, I: 1 }, Id: 1 }
13) { A: 13, B: { A: 4, B: 4, C: 4, D: 4, E: 4, F: 4, G: 4, H: 4, I: 4 }, Id: 4 }
14) { A: 14, B: { A: 2, B: 2, C: 2, D: 2, E: 2, F: 2, G: 2, H: 2, I: 2 }, Id: 2 }
15) { A: 15, B: { A: 0, B: 0, C: 0, D: 0, E: 0, F: 0, G: 0, H: 0, I: 0 }, Id: 0 }
16) { A: 16, B: { A: 3, B: 3, C: 3, D: 3, E: 3, F: 3, G: 3, H: 3, I: 3 }, Id: 3 }
17) { A: 17, B: { A: 1, B: 1, C: 1, D: 1, E: 1, F: 1, G: 1, H: 1, I: 1 }, Id: 1 }
18) { A: 18, B: { A: 4, B: 4, C: 4, D: 4, E: 4, F: 4, G: 4, H: 4, I: 4 }, Id: 4 }
19) { A: 19, B: { A: 2, B: 2, C: 2, D: 2, E: 2, F: 2, G: 2, H: 2, I: 2 }, Id: 2 }
*** Ctx ping count: 4
    [0:3](4=0+0+4): KeyJoin(*1: TB, *2: TA, *1.B, *2.Key, SetFields(!3: *1, Id : *2.Id))
###
