Caml1999T037]{qC#TmcР&Lambda&Lambda-lambda/tmc.mlRR@@ 3@@@@@@#intA;@@#intA@@@@@&_none_@@A@A@$charB;@@$charA@@@@@ @A@&stringQ;@@&stringA@@@@@@@@%bytesC;@@%bytesA@@@@@@@@%floatD;@@%floatA@@@@@@@@$boolE;@@%falsec@@%@$trued@@+@@@A@@@@@,@A@$unitF;@@"()e@@6@@@A@@@@@7@A@ #exnG;@@@A@@@@@;@@@#effH;@@O@A@A@@@@@@D@@@,continuationI;@@Q@@P@B,continuationA@nY@@@@@@T@@@%arrayJ;@@R@A%arrayA@@@@@@_@@@ $listK;@@S@A"[]f@@l@"::g@@@T@@y@ @@A@Y@@@@@|@@@&optionL;@@V@A$Noneh@@@$Somei@@@@@A@Y@@@@@@@@)nativeintM;@@)nativeintA@@@@@@@@%int32N;@@%int32A@@@@@@@@%int64O;@@%int64A@@@@@@@@&lazy_tP;@@X@A&lazy_tA@Y@@@@@@@@ 5extension_constructorR;@@5extension_constructorA@@@@@@@@*floatarrayS;@@*floatarrayA@@@@@@@@&iarrayT;@@Y@A&iarrayA@Y@@@@@@@@ *atomic_locU;@@Z@A*atomic_locA@@@@@@@@@ .Assert_failure`#@@@@@J@@@@@@@@[@@A頰=ocaml.warn_on_literal_pattern@@0Division_by_zero]#@@@A󠰠  @+End_of_file\#$@@@A@'FailureY#,@'@@A@0Invalid_argumentX#5@0@@A $#@-Match_failureV#>@@=@9@;@@a@@A5!4!@)Not_foundZ#O@@@A&=)<)@-Out_of_memoryW#W@@@A.E1D1@.Stack_overflow^#_@@@A6M9L9@.Sys_blocked_io_#g@@@A>UATA@)Sys_error[#o@j@@AG^J]J@:Undefined_recursive_modulea#x@@w@s@u@@h@@AXo[n[@:Continuation_already_takenb#@@@A`wcvc@&Stdlib@@@@A3@@@R@@@3@@@A+4tmc_call_informationgAU U4@@;@@#loch@@/scoped_location@@@ VV9;V9P@@CA(expliciti@@r@@@ YWQSWQb@@DA@@A@@@@@UXcd@@@@BA@#V9>@@@Ш@г!"V9@V9O@@(3@@6;@@@A@@@@@@@@@@@@/@@ W@*@#&&!WQ[@ @@Ш@г)$boolWQ]WQa@@1@@4@@ Z@0@@A@,@@,+@3@Y@@A+3subterm_informationBYejYe}@@;@@)tmc_calls@@ug@@@ J@@@ L Z Z@@GA@@A@@@@@Yee[@@@A#FA@# Z@ @@Ш@г$list!Z"Z@г4tmc_call_information*Z+Z@@&3'&&'''''@9;@@@A@@@@@"@@@@@@@@0 @@3@@ M @*@@A@&@@&%@310011111@ @@A+3ambiguous_argumentsC@\A\@@;@@(explicit@@@@@ YM]N]@)ocaml.doc# When [explicit = true], we have an ambiguity between arguments containing calls that have been explicitly marked [@tailcall]. Otherwise we have an ambiguity between un-annotated calls. ]^^a@@@@@@@pIA)arguments@@נu@@@ \@@@ ^nbob@@JA@@A@@@@@r\sc@@@@HA@#22-z]@@@Ш@г5$bool]]@@=3@ZL;@@@A@@@@@@@@@@@@E@@ Z@A>`=<@<<@@@<@<@#88.b@-@@Ш@г;$listbb@г@3subterm_informationbb@@H+@@@M, @@P@@ _/@G@@A@C@@CB@3@/@@A+%errorDee@@;@@?Ambiguous_constructor_arguments@@@ m@@ff @@LA@@A@@@@@e@@@AKA@#ff @ @г3ambiguous_argumentsf @@3@`,;@@@A@@@@@@@@@@@@@@@@A@@@@3@@@%ErrorEh",h"1@#@(Location!t@@@֠K@@@@@Ah"" h"G@@MA@г(Locationh"5h"=@h">h"?@@@#3@9d^@@ @@г%error'h"B@@%  @@@@"@"@"!@ A++destinationF3kJW4kJb@А&offset@387788888@#PJ;@@@A@A@G@B@@@IkJJJo@@@@\NA&offsetF;@@@A@@@@@QpRp@@@@dOA@@UkJOVkJV@@BA@; @A#var@@%Ident!t@@@~hlgiilgv@@{PA&offset@@7G@rmwysmw@@QA#loc@@)Debuginfo/Scoped_location!t@@@nn@@RA@@A@Y@@@@@A@@@>@#//&lgl@%@@Ш@г2%Identlgnlgs@7lgtlgu@@@Ac@@D@@f@<@#885mw@4@@Ш@А&offset>pmwmw@@C@@u@A@#==2n@1@@Ш@г@)Debuginfonn@Fnn@@Jnn@ @@V @@Y@@@O@@A@@+pp@@;@@&Offset&lambda@@@@@p@ U In the OCaml value model, interior pointers are not allowed. To represent the "placeholder to mutate" in DPS code, we thus use a pair of the block containing the placeholder, and the offset of the placeholder within the block. In the common case, this offset is an arbitrary lambda expression, typically a constant integer or a variable. We define ['a destination] as parametrized over the offset type to represent formal destination parameters (where the offset is an Ident.t), and maybe in the future statically-known offsets (where the offset is an integer). q{ ' )@@@@@@@SA@@A@@@@@@@A@#p@@гp@@$ǰ@@@@ ؐ@@@@@@@A@@@@3        @@@@ఠ+offset_code} + /} + :@0TA@@@@@@G@@@O@@@G@@@G@3-,,-----@]@@@࣠@%paramAĠ&OffsetB} + <C} + B@;h@@@@iA@@A@Adb@Tఠ!tP} + CQ} + D@cUA@@t@@@3RQQRRRRR@&?[} + +\} + I@@@@@@^} + ;_} + E@@9 @@@@ఐ!ti} + H@@@@@=3gffggggg@"@@@A@NG@@A@@@@@ఠ.add_dst_params} K O~ K ]@VA@@@].!t@@@@@@G@@@@@H@@@G@נ@&Lambda*value_kind@@@G@@@J@@@@G@@@,G@@@@G@@@G@@@G@3@@@@@@࣠@ Aঠ#var K ` K cA3v~@@y@@@3lk@@A@Ai@f3cb@@B@AX@U@At@qఠ@WA@@@@3@%l K K@  @@@@&offset K e K kAఠ@XA@k@@@@@@ K _ K l@гx+destination K w K @г}%Ident K o K t@ K u K v@@@@@@8 @@@@@@=@@# K ^$ K @@@A@@@@¶msA/ K 0 K @BYA@@3.--.....@QYV@X@WC@@B@A@@@@  @@ภ"::@@  A@  @;@@U@B@AA@A@@@ఐr#varS@  T@  @@@3QPPQQQQQ@$0@'@(@@@@ภ'Pgenvala@  b@  @;'Pgenval@@@ 8@@@@CA@A1lambda/lambda.mli @@@@@ @@G@@@r@  s@  @@G@ @ภ=|@  }@  @<@ఐ&offset@  @  @U@@I@9@@ภ'Pintval@  @  @;'Pintval6@@@BCA@A364?@@@@@  @@G@M@@@  @  @@G@R@ఐ¶ms@  @Y@@\@@@@@@@I@c@@H@@@@@h@A@>G@@A@@@@ఠ,add_dst_args B  B  @ZA@@@@@@@@@G@@@@FA&lambda@@@!J@'@@@,G@@@> G@@@@G@@@G@@@G@3@>@@@@@࣠@Aঠ#varB  B  A=ఠ @&[A@@@@3@QB  C  #@@@@&offset%B  &B  ANఠ @=\A@P@@@ @@@1B  2B  @г]+destination<B  =B  @гb&offsetEB  FB  @@j@@@1@@@r@@@6 @@QB  RB  @@@z:@@@@$argsA]B  ^B  @p]A@@y3\[[\\\\\@JRO@Q@P<9@;@:@@@@  @@ภ.mC  nC  @-ภ$LvarvC  wC  @;$Lvar@@@ @%Ident!t@@@ @A@@V@A%& &$%& &3@@@ @ఐ}#varC  C  @1@@@@@#I@%I@$3@=I@@@A@@@@+ @@I@"@ภjC  C  @iఐ+offset_codeC  C  @@@@@@@1@@0@@@/@@.%@@ఐ&offsetC  C  @i@@@@@:J@FC@E@D0-@/@. @@@@@@  @@ภ%LprimF P RF P W@;%Lprim@)primitive@@@ $listK@@@ @@@ /scoped_location@@@ @CH@V@A<-'@'B=-'@'v@@@@ภ2Psetfield_computedF P XF P j@;2Psetfield_computed&@@@ /@ 4immediate_or_pointer@@@ @@@@@@@@@ఠ*block_args1 'y (y@ :mA@@$listKLI@I@@@@L@03 2 1 1 2 2 2 2 2@ ,Q@#@$@@@డ$List&append Iy Jy@  My Ny@@@(!a@@@@b@@a@5 @@@`@@_:@@@^@@]@@\@(list.mlinn@@,Stdlib__ListO@)$@@@!~@@@N@@@@@@@! @@@@@Z@@@@@@@T@@ఐ&constr y y@@@c@&before y y@3@@@"@@C3@@@@A@3@@A@A@3@@B@A@3@@D@A@3 @@E@A@@A@ @@Z9@@@O@O@|@@k@@@VB@@@@@F@@@@@@@ภ y y@ఐ!t y y@@@@ఐ⠐&constr y y@ǰ@@@%after y y@@ @@ II@@@@M@M@@@" @@@@@M@@@@@@A@ y@@ภ%Lprim z z@zภ*Pmakeblock z z@;*Pmakeblock\@#intA@@@ ޠ(Asttypes,mutable_flag@@@ ߠs+block_shape@@@ @CBo~@A~(*~(Z@@@xe@ఐ8&constr 5z 6z@@@[3 3 2 2 3 3 3 3 3@@@@@@#tag ?z @z @ @@5@@@K@K@@ఐV&constr Sz  Tz@;@@y@$flag Zz [z@ @@I@@@K@K@,@ఐq&constr nz oz @V@@9@%shape uz! vz&@а @@[@@@K@K@G@@t z'@@@@@K@N@ఐg*block_args {)4 {)>@V@@@@@K@K@a@ఐ&constr {)@ {)F@@@n@#loc {)G {)J@ @@@@@K@z@@@@@@@~@@@@A@I@@A@@@Ƞ@ఠ/tmc_placeholdery }MS }Mb@ nA@@@@@I@3        @@@@@@డ .dummy_constant&Lambda  @   @@@@@ @4E4E4E4_@@9G@ @@!@A@ }MO @@@!@ఠ0with_placeholderz  @ oA@@@(@@@I@@@@@@@@@@@@@  )&lambda@@@ @@ I@@@7@@@I@@@I@@@I@3 $ # # $ $ $ $ $@[ib@c@d@@@࣠@&constr|A 7 8@ JpA@@63 6 5 5 6 6 6 6 6@E ? @@@@@@  @@$body}A K L@ ^qA@б@г>+destination Z [@гC&offset c d@@K@@@3 c b b c c c c c@.:f@1@2@@ @@@V @@@@@гRS v w@@Y@@@@@@@@@@ @@  @@@r@@@@@ఠ2k_with_placeholder~  (  :@ rA@@@@@+L@3        @2W@@@@@@@@@@@@@@@\@]@@@ఐࠐ%apply =C =H@@@@@@@@@@@@@@@@@@@@@@.@@)@@@?M@=@/$flag =W =[@ภ'Mutable =^ =e@;'Mutable(Asttypes,mutable_flag@@@@@@AB@@A4parsing/asttypes.mligWugW~@@@ S@@@@@@@6M@:a@T@@@FM@D@b  @@@M@@@LM@I@e@@@T@@@SM@P@o@@@YM@W@@ఐ&constr &=K '=Q@@@$@ *=I +=g@@O@@@/M@\@@ఐu/tmc_placeholder ;=h <=w@@@S@@@-M@^M@]@@ @@@A@ G $ @@@ఠ/placeholder_pos R{ S{@ esA@@#intA@@@lL@_3 Y X X Y Y Y Y Y@@@@@@డ $List&length n{ o{@  r{ s{@@@M!a@@@@@@+@@@@@@kk @@C@@@@@@@qL@e@@@d@@c@@@@b@@a=@@ఐs&constr { {@?@@L@&before { {@ @@;&@@@nM@sM@p[@@L @@b\@A@ { @@@ఠ3placeholder_pos_lam  @ tA@@@@@wL@t3        @r|@}@~@@@ภ&Lconst  @;&Lconstb@ /3structured_constant@@@ @AB@V@Az'&K&M{'&K&l@@@ 4 @ภ*Const_base  @;*Const_base@@@ ]@(constant@@@ V@A@@D@Arvr@@@ M@ภ)Const_int@;)Const_int%(constant@@@@#intA@@@@A@@G@A)X*X@@@1A@ఐҠ/placeholder_pos$%@U@@@@@L@L@_@@/0@@=@@@L@g@@78@@^@@@yL@~o@@g@@P@@@xs@A@C @@@ఠ)block_varN O@auA@@%Ident!t@@@L@3WVVWWWWW@@@@@@డ ,create_local%Identlm@ pq)@@@&stringQ@@@@@*@@@@@@0typing/ident.mlib##b#@@@-E@@@@@@@@@:@@@@@5@@%block+0@@*1@@*@@@M@M@I@@: @@RJ@A@ @@ภ$Llet595=@;$Llet8@ (let_kind@@@  @@@ ?!t@@@ @@@ @@@ @EE@V@A c*&& d*&&@@@ @ภ&Strict5?5E@;&Strict(@@@ t@@@@C@@A v!k!{ w!k!@@@ 0@@  @@3@@@K@3@@@@@@ภ'Pgenval5G5N@ @@@ J@@@K@@ఐ)block_var5P5Y@@@M@@@K@K@$@ఐ2k_with_placeholder5[5m@@@ -@@@K@K@6@ఐ᠐$body)oy*o}@@@@@@@@@@@@@@@@@Q@@ະ n#varFG@ఐ)block_varOP@f@@ @@@L@n@ &offset]^@ภ&Offsetef@ #ఐ3placeholder_pos_lamop@@@ @@@L@L@@@ @@b@@@L@@ #loc@ఐ\&constr@(@@@#loc@ @@ #@@@L@@@@o~@@@@@@@@L@@@ @@ @@@@L@@@t@@ @@@@x@@\@vy@@@z@@\@t{@@"@|A@I@@A@@@@ఠ,delay_impure @vA@б(block_idг#int@@ @@@3@@@@@ @@б@г&!t !@@ @@@@@б@б@г7!t&'@@ @@@#@@г&lambda + 1@@ @@@0@@@@@@@5 @@г!&lambda6<@@ @@@B@@@@@@@G)% @@@>@@ @@MA@@^U@@ @@R4@@lkA@@ee@@@3@@2@Z@@@1@@0@@T@@@/@@.J@@@-@@,@@+;@@@*@@)@@(@@'t@@ఠ)bind_list_?G`?P@rwA@@(block_id#intA@@@$sJ@O@@P*arg_offset#intA@@@%J@U@@V@^ @@@%J@%9@@@%;J@[@@\@@vO@@@@%GJ@%C@@%D @@@%J@%EA@%FJ@a@@bJ@c@@dJ@]@@^J@W@@XJ@Q@@RJ@N@࣠NNAR?R?Z@xA@@T3@e?C@@@@@?Q @RRAV?\?f@yA@@X3@ k@@@@@@?[@@'lambdasA?g?n@zA@@\3@m@@@@@@@@!kA?o?p@{A@@[3@p@@@@@@@@@ఠ.can_be_delayeds}s@|A@@@ "@@@lO@h@@i@@@tO@j@@kO@g3@%1@(@)@@@@Ġ$Lvar*oy+o}@ @/o~0o@@ @@@n3/../////@48sy9@@@@@@ @@,@Ġ&LconstAoBo@i@FoGo@@k@@@q@@@ @@=@@#@@>@@@ภ$trueSoTo@;@@@@M@@@AB@@A*@@@@@G'@@_`@@R-@@@ภ%falseg/@;@@@@B@@A:@@@2@@W7@@A%paramn^f6@@@7@@gO@>@A@;@@@ఠ(bindings@}A@@Y@@@@@%8@ @@%7@@@%6O@@@@O@3@@@@@@@ఠ$args@~A@@ @@@O@@@1 @@@1@ @@@డ)$List%split@ @@@@!a@@!b@@@:@@@9@@8@a@@@6@J@@@7@@5@@4@====@@@@2-@@@*@w@\@@@@@@@@@@@@kj@@@@@@@3        @w@@@@డ$List$mapi%&@ )*@@@@@@@@@@!a@g@@!b@d@@@@@@@@@@@@ @@@@@@@@CCCu@@X@2-@@@@*@@@@@@ y@@@R@@@@@*@@@%R@% @R@% @@%R@ @@@R@ @"R@ @@ R@@@@@@@@+@@@@@E*@@@@@@@@@࣠@!iA@A@@s@@@@@@@#lamA@@A@@S3@@@@@@@@@@  @@ఐǠ.can_be_delayed@1@@@ @@@@@@@@@@3@!-v@$@%@@@@ఐ4#lam@ @@@@@@@@@V@@@ภ$None!%@;FqO@@W@@@@AA@A@@H@@@v@@@-@@ఐ]#lam'*@6@@9@@ +@@@@@@B@@ఠ!v&CU'CV@9AA@@@@@V@3*))*****@V@@@డ,create_local%Ident=CY>C^@ AC_BCk@@Ѱ@@@@@@@@@@@@@ @@డ&Printf'sprintf_l`l@ cldl@@@&Stdlib&format!a@$unitF@@@&stringQ@@@@@@@@@@@*printf.mli@@.Stdlib__PrintfC@.)@@@&@-@@$r@3@@@$@@$3@@@W@%W@*W@$@W@$@@$W@$X@@$qW@7@@@4@@@@@@@@#@@@@ภ8CamlinternalFormatBasics&FormatllA;&Format8CamlinternalFormatBasics'format6!a@!b@!c@!d@!e@!f@@@@#@'#fmt$ @@@#&stringQ@@@#@B@@A@A@@ఐ9(block_idll@@@@@డi!+ll@@@@@@@@@@@@@@@@@@@@'%addintBA @@@@*stdlib.mli0++0+,@@&Stdlibn@#"@@@@@@$@@$@ @@@$@@$@@@$@@$@@$@@ఐr*arg_offset?l@l@Z@@@@ఐ!iLlMl@@@D@@@$Y@%Y@%'@@WlXl@@Y@$,@@\l~]l@@W@10@@#@@41@A@aCQ@@@ภ$Somelm@;r@A@AA@A@@@@ఐV!v|}@U@V@W@@3{zz{{{{{@`@@@@ఐ٠#lam@@@(@@@@R@%@@(@@U@% @@ภ$Lvar@(ఐ!v@,@@1@@@%U@%U@%2@@ @@MU@%5@@@@U@%:@,=@@@@@@@@@@@@@@@k@@f@@@@S@%$S@%6@@@@@Ks@@@@@r@@@@@C@@ఐ 'lambdas@@@bP@@+@@ @m@R@@@@@P@%>Q@%4_@@2@@@}@Y@@%@P@h@A@<@@@ఠ$body  @"BA@@jJ@%A3@{@@vo@p@q@@@ఐ3!k" # @@@@@ఐ$args/ 0 #@@@@@@@@A@4 @@డ$List*fold_rightB'-C'1@ F'2G'<@@@@!a@@@@#acc@@@@@@@@@@ 5@@@@@@@@@@@@@@@  @@ ^@.)@@@@@@@@%N@%@N@%@@%N@%}@@@%|N@%P@@%U@N@%L@@%T@@%S@@%R@@%Q@5"@@@%O@@%N@@@%M@@%K@@%J@@%I3@@@@@@@࣠@'bindingA'B'I@CA@@<3@@@@@@@$bodyA'J'N@DA@@23@%N@@@@@@@@ఐ$'bindingRbRi@@@\3@F@@@@@Ġ$Noneo{o@@@@@l3@@@@@m@@@ఐ0$bodyoo@@@^ @Ġ$Some@@ఠ!v@EA@@6@@ఠ#lam@%FA@@B@@@@@@@@%K@@@'@@L@@L@@@ภ$Llet&'@ xภ&Strict/0@ X@@@ @@@%S@%321122222@e8@2@3-@'@(@@@ภ'PgenvalCD@@@@@@@%S@%@ఐM!vST@@@@ఐL#lam^_@%@@*@ఐ$bodyij@@@5@@Gm@@7@@@AoR\@@@q'=r@@@@@%n@@@%m@@%l@@%kO@%O@%@@ఐ (bindings@t@@.@@@%iO@%O@%@@ఐ$body@@@@@_@@@n@@@@@@l@@@A@BJ@%@A@@࣠(block_idA@GA@@@@@%3@b[@\@]@@@@ @@&constrA@HA@@ @@@%3@&@@@%@!@"@@@@@@$bodyA@IA@@@(@@@&@@&@@@&@@&3@!1'@@@%@+@,@@@@@@ఐ)bind_list @I@@@@@&8@@&7@@@&6@@&5@-@@@&2@@@&4@@&3@@@@@&1@@&0=@@@&-A@&/@@&.@@&,@@&+@@&*@@&)3+**+++++@@X@N@@@&@@& M@@@& @@& @Y@Z@@@ؐఐ(block_idGH@v@@@@@&\O@&^O@&]!@ܐ@X)Y*@@@@@&ZO@&`O@&_1@@ఐ&constrm+n1@|@@@@@&e@&bE@&beforey2z8@۰@@@@@&V@@@&XO@&fO@&cW@@@@@@@@@&U@@&T@@@&QA@&S@@&R@@&Ph@@࣠@'vbeforeA@G@JA@@ @@@&@@@&3@@@@@  @@@ఠ*arg_offsetKSK]@KA@@@@@&O@&3@* '@@@&@@@&~@(@)@@@డB٠۰KzK{@ذ@@@ c@@@&@@&@@@@&@@&@@@&@@&@@&&@@డb$List&lengthK`Kd@ KeKk@@ @@@ @@@&P@&@@@&@@& @@@&@@&N@@ఐ[&constr!Kl"Kr@0@@G@@@&@&b@&before-Ks.Ky@@@ +@@@&Q@&Q@&q@@< @@ @@@&@&Q@&y@@AGK|HK}@@>@@@&P@&P@&@@T @@@A@RKO @@ఐ )bind_list^_@@@  @@@&@@&  @@@&@@&@ @@@&@@@&@@&@@ ߠ@@@&@@&@@@&͐A@&@@&@@&@@&@@&@@&3@@@@@@ (ఐ栐(block_id@ư@@ 1@@@&Q@&Q@&@ ,ఐ*arg_offset@!@@ 5@@@&Q@'Q@&+@@ఐ&constr@а@@@@@'@'?@%after@'@@ I@@@&@@@&Q@'Q@'Q@@~@@@@ A@@@&@@&@@@&A@&@@&@@&b@@࣠@&vafterA@ LA@@ [@@@'!@@@' 3@{@@@@  @@ఐ3$body@@@@/@@@')@@'(.@@@''@@'&3@- ~5@@@'@@@'@+@,@@@@b@@@'TQ@'R@]@@@'YQ@'W@T@@@'^Q@'\@&beforeIJ@ఐ'vbeforeRS@@@^]@@@'=@@@'@@%afterde@ఐv&vaftermn@O@@gf@@@'J@@@'IQ@'K[@Ѡ`@@@'iQ@'g@@ఐ &constr@@@@@@'hQ@'fQ@'Qt@@@@@@'2Q@'l|@@@@@@@'mQ@'0@@@@ @@@'@@@'@@'@@@'yO@'@@'O@'tO@'o@@Z$@@@g%@@@<'@@@ @@@&v@@@&u@@&t @@@'M@&q@@&sM@'M@'{ @@>@@!@@@@ %@@@M@@L@@@@K@@J@@@@@I@@H@@@G@@F@@E(@@@D@@C@@B@@AI@'I@'<@ 5d@б *гF ' &@J@@@4 # @б@г9  @=@@@5 , @б@б@г(  @,@@@6 7 @г+  @/@@@7 > @@@@8@@9 B @гW  @[@@@: I @@@@;@@< M @@(@@=@@> Q @ a5@@?@@@ U @ tA@@ h h@@@'@@'@ ]@@@'@@'@@ W@@@'@@' M@@@'@@'@@' >@@@'@@'@@'@@'I@' w@A@Y@@@ z@A@@6@l @   @@@&@@%@ @@@$@@#@@ @@@"@@! z@@@ @@@@ k@@@@@@@@@@ @ @@3@  "@@n@03@M@@@!tI;@@#tag@@o@@@'߰O  O  @@NA$flag@@,mutable_flag@@@'P  P  @@OA%shape@@+block_shape@@@'Q  Q  @@PA&before@@1&lambda@@@'@@@'R  R  @@QA%after@@C&lambda@@@'@@@'S  $S  7@@RA#loc@@i/Scoped_location!t@@@'T 8 <T 8 ^@@SA@@A@@@@@N  U _ b@ The type [Constr.t] represents a reified constructor with a single hole, which can be either directly applied to a [lambda] term, or be used to create a fresh [lambda destination] with a placeholder. J  M  @@@@@@@@@MAA@%apply@}@@@(@@(@&lambda@@@(@@( &lambda@@@(@@(@@(@Y  Y  @ϐ X [apply constr e] plugs the expression [e] in the hole of the constructor [const]. *W d f+X  @@@@@@@=TA@0with_placeholder@@@@(@@(!@@@@@(@@@(@@(U&lambda@@@(@@(@@(Z&lambda@@@(@@( @@("@V]dfW]d@ s [with_placeholder constr body] binds a placeholder for the constructor [constr] within the scope of [body]. d[  e\"c@@@@@@@wUA@,delay_impure(block_idJ@@@(#@@(.@@@@($@@(,@@@@@(%@@('&lambda@@@(&@@((@@(*&lambda@@@()@@(+@@(-@@(/@mm@H  We may want to delay the application of a constructor to a later time. This may move the constructor application below some effectful expressions (for example if we move into a context of the form [foo; bar_with_tmc_inside]), and we want to preserve the evaluation order of the other arguments of the constructor. So we bind them before proceeding, unless they are obviously side-effect free. [delay_impure ~block_id constr body] binds all inpure arguments of the constructor [constr] within the scope of [body], which is passed a pure constructor. [block_id] is a counter that is used as a suffix in the generated variable names, for readability purposes. _lW@@@@@@@VA@@БA+  N  N  @@"@#!!O  @@@Ш@г$#intO  O  @@,3@6;@@@A@@@@@@@@A@@3@@'@/@#++$P  @#@@Ш@г.(AsttypesP  P  @5P  P  @@@=@@@@@' @:@#660Q  @/@@Ш@г9:Q  Q  @@@.@@C@@'1@>@#::/R  @.@@Ш@г=$listR  R  @гBC R   R  @@IH@@@NI @@Q@@'L@G@#CC8S  )@7@@Ш@гF$listS  2S  6@гKL$S  +%S  1@@Rc@@@Wd @@Z@@'g@P@#LLC.T 8 ?@B@@Ш@гO)Debuginfo;T 8 B<T 8 K@W?T 8 L@T 8 [@@[DT 8 \ET 8 ]@ @@e @@h@@'@`@@A@\ZY@YY@@@Y@Y@@3POOPPPPP@@Ahg@YY]Y  ^Y  @б@гX!tgY  hY  @@`3dccddddd@,@A@@б@г]^sY  tY  @@d @@г`a{Y  _@@f`@@p a@@yb@@{@dc@1Scb@bb@@@b@b@"p``]dj]dz@б@г_!t]d}]d~@@g3@5@A@@б@б@гb+destination]d]d@гg&offset]d]d@@o@@@t @@гlm]d]d@@s!@@" @@гpq]do@@v)p@@*]dr@@,/s@@@ut@|ts@ss@@@s@s@9qqmm@бrгn#intmm@@v3@L@A@@б@гs!tmm@@{ @@б@б@гt!tmm@@|@@гyzm m@@"@@# @@г}~m|@@*}@@+m@@-#@@.m@@@@쐠@@@@@@<@3@=@A3!  !!!!!@@@(I  )n@@@@B@C@@@2I  @ @@4I  @@#DpsJ@6=A6@@SA@БA+#dpsKQR@А!a@(3VUUVVVVV@@A@b`@75@@@@5;@@(@A@A&@@(@@@(@(G@B@@@z{@@@@XA@@~@@)@;*@A@A$tailA@@@(@@(#dsthO@@@(@@@(@@(GL@(@@(@@(Y@@@@@(@@@%@@Aбг$bool@@"Q@@бг+destination@г &offset@@(e@@@-f @@А!a(jL@@9lN@@EnP@@R@@RQ@3@p@@A+!tL@А!a@(3@c;@@(@A@A@G@B@@@!$@  We want to optimize nested constructors, for example: {[ (x () :: y () :: tmc call) ]} which would naively generate (in a DPS context parametrized over a location dst.i): {[ let dstx = x () :: Placeholder in dst.i <- dstx; let dsty = y () :: Placeholder in dstx.1 <- dsty; tmc dsty.1 call ]} when we would rather hope for {[ let vx = x () in let dsty = y () :: Placeholder in dst.i <- vx :: dsty; tmc dsty.1 call ]} The idea is that the unoptimized version first creates a destination site [dstx], which is then used by the following code. If we keep track of the current destination: {[ (* Destination is [dst.i] *) let dstx = x () :: Placeholder in dst.i (* Destination *) <- dstx; (* Destination is [dstx.1] *) let dsty = y () :: Placeholder in dstx.1 (* Destination *) <- dsty; (* Destination is [dsty.1] *) tmc dsty.1 call ]} Instead of binding the whole newly-created destination, we can simply let-bind the non-placeholder arguments (in order to preserve execution order), and keep track of a list of blocks to be created along with the current destination. Instead of seeing a DPS fragment as writing to a destination, we see it as a term with shape [dst.i <- C .] where [C .] is a linear context consisting only of constructor applications. {[ (* Destination is [dst.i <- C .] *) let vx = x () in (* Destination is [dst.i <- C (vx :: .)] *) let vy = y () in (* Destination is [dst.i <- C (vx :: vy :: .)] *) (* Making a call: reify the destination *) let dsty = vy :: Placeholder in dst.i <- vx :: dsty; tmc dsty.1 call ]} The [delayed] argument represents the context [C] as a list of reified constructors, to allow both to build the final holey block ([vy :: Placeholder]) at the recursive call site, and the delayed constructor applications ([vx :: dsty]). In practice, it is not desirable to perform this simplification when there are multiple TMC calls (e.g. in different branches of an [if] block), because it would cause duplication of the nested constructor applications. The [delayed_use_count] field keeps track of this information, it counts the number of syntactic use sites of the delayed constructors, if any, in the generated code. %')C)G@@@@@@@@@ YA@@@@@;$@A$code@@'delayedb!t@@@)@@@)@@)͠@M@)@@@)@@)  @@ 2ZA1delayed_use_count@@@@@) + , @@ >[A@@A@Y@@@@@FC@@5@#// 5@@@Ш@б2г.$list @ A@г3&Constr K L@: O P@@@Br@@@Gs @@г=#dps Z [@А!aE a b@@@L @@^ e @@b@@)@J@#FFA l@@@@Ш@гI#int u v@@Q@@T@@)@P@@A@+ M@@@@@@@@3        @@@@ఠ,write_to_dstѠ )I)O )I)[@ \A@@@ʠx@@@)@@@)M@)T@@)U@'@@@)Q@)@@@)M@)Z@@)[@@@@)M@)`@@)a@@@)M@)b@@)cM@)\@@)]M@)V@@)WM@)S3        @@@@࣠@#dstA )I)\ )I)_@ ]A@@>3        @M )I)K ))@@@@@  @@'delayedA )I)` )I)g@ ^A@@C3        @!U@@@@@@@@!tA )I)h )I)i@!_A@@@3        @W@@@@@@@@ఐ-assign_to_dst!)l)p!)l)}@Ѱ@@@B@@@)@@@)@@)~@2@@@)}@@)|5@@@){@@)z@@)y3!"!!!!!"!"!"!"!"@)5k@,@-@@@@ఐa#dst!4)l)~!5)l)@F@@@@)@@@M@@@)@@)P@@@)@@)@@డ$List)fold_left!R))!S))@ !V))!W))@@@@#acc@&@@@!a@)@@ @@@@@@@@@@ɠ@@@@@@@@@@@@333r@@]@-(@@@@M@)Q@)@@)@@@)@@)@@)@@)@ @@)@@@@)@@)@@)@@)@@)s@@࣠@!tA!))!))@!`A@@%3!!!!!!!!@@@@@@@&constrA!))!))@!aA@@ 3!!!!!!!!@7@@@@@@@@డ%apply&Constr!))!))@ !))!))@@@&@@@(@@(@!@@@(@@(!@@@(@@(@@(@@@@:@@@)@@)@@@@)@@)@@@)@@)@@)3!!!!!!!!@@LL@C@D@@@@ఐS&constr"))"))@ @@Y@@ఐo!t"))"))@Y@@@@K@@M@)U@)!@"))"))@@@@@)@y@@)@@)@@)R@)R@)~@@ఐ**0#?**3@@@q@@@*@@@*~R@*R@*"@@ఐ'delayed#V**4#W**;@|@@@@@*|@@@*{R@*R@*:@@ఐ!v#n**<#o**=@@@@@@*yR@*R@*N@@r @@@@@*R@*wT@#))#*>*C@@}{z@@@*%@@@*$@@*#w&@@@*"@@@*!@@* N@*@𡠐1delayed_use_count#*E*I#*E*Z@A#*E*]#*E*^@@@@@*N@*3########@@@@@@#))@гG!t#))#))@гLM#))#))@@S@@@X @@@@Y@),A@iM@*3@A!t# Create a new destination-passing-style term which is simply setting the destination with the given [v], hence "returning" it. #!*d*f#$**@@@@@@@?@?>@b@ఠ$unitޠ#&*+#&*+@#fA@г!t#&*+ #&*+@г#$unit#&*+#&*+ @@ @@@*3########@@@@@ @@@ @@@*@@'&A@@ @@@*@@@*@ຠp$code$'++$'++@࣠'delayedA@$!'++,$"'++-@@@@@+@@@+/@@$+'++# @$tailA@$4'++4$5'++5@@@@@+&>@@$:'++.@#dst A@$C'++;$D'++<@@@@@+7@@@+6Q@@$M'++6 @@ภ"()$U(+@+F$V(+@+H@;##@@@N@@@@A@@A$-@@#@ @@@@@+=f@$b'++$c)+I+N@@`^]@@@+ @@@+@@+Z$@@@+@@@+@@+M@+^~@ԡ1delayed_use_count$*+P+T$*+P+e@@$*+P+h$*+P+i@@c@@@+M@+@@@$&*+$++k+n@гàг$@(@@@*@@ @@@*@A@@@@@+@@@+M@+@A@$&**!@@"@@ఠ#map$-+p+v$-+p+y@$gA@@@@!a@,M@+@@+!b@+M@+@@+M@+@@+@M@+@@@+M@+@@+M@+@@@+M@+@@+M@+@@+M@+3$$$$$$$$@ @@@*@@@*@@@@@࣠@!fA%-+p+{%-+p+|@%hA@б@А>C %-+p+%-+p+@@А=B%%-+p+%-+p+@@@O@@+I@@+, @@%-+p+z%-+p+@@@W0@@@@!dA%(-+p+%)-+p+@%;iA@гP!t%5-+p+%6-+p+@А!aX3%6%5%5%6%6%6%6%6@NA@w@@+q@@+@<@=@@%C-+p+%D-+p+@@@fe@@@+@@%K-+p+%L-+p+@@@n@@@@ຠ$code%X.++%Y.++@࣠'delayedA%f.++%g.++@%yjA@@^]@@@+@@@+3%l%k%k%l%l%l%l%l@7R@@@+@M@N@@@@%y.++@$tailA%.++%.++@%kA@@@@@+3%%%%%%%%@-@@@+@@@+@,@-@@@@%.++@#dstA%.++%.++@%lA@@@@@+@@@+3%%%%%%%%@"0%@@@+@+@,@@@@%.++@@ఐ!f%/++%/++@@@@@@,@@,3%%%%%%%%@,43@@@+@@@+@+@,@@@@ఐ!d%/++%/++@l@@AM@,@@@,"U@,"@$code%/++%/++@M@@@@@,!@@@, @@,@@@,@@,8@ఐ'delayed&/++&/++@|@@@@@,A@@@,@T@,MT@,KP@ఐ$tail&/++& /++@s@@@@@,JT@,PT@,Of@ఐ#dst&5/++&6/++@p@@@@,H@@,GT@,ST@,Q@@i@@cT@,C@@@@x@&J.++&K/++@@HFE@@@+@@@+@@+BP@+@@@+@@+O@,q@1delayed_use_count&e0++&f0+,@ఐK!d&p0+,&q0+,@@@Ԡ@@@,O@,3&t&s&s&t&t&t&t&t@@@@1delayed_use_count&~0+, &0+,@ڰ@@]@@@,O@, @@@&-+p+&1,,@г!t&-+p+&-+p+@А!b'&-+p+&-+p+@@@* @@@@+@A@M@,@A@&-+p+r@@@@ఠ$pair&3,!,'&3,!,+@&mA@@@!a@.M@,@@@,M@,@@,@!b@.M@,@@@,M@,@@, @$M@,Ǡ@M@,@@,@@@,M@,@@,M@,@@,M@,3&&&&&&&&@1*@+@,@@@࣠@"daA&3,!,-&3,!,/@'nA@гB!t'3,!,5'3,!,6@АDI3''''''''@!^' 3,!,#' 8- -@@@' 3,!,2'3,!,4@@@VU@@@, @@'3,!,,'3,!,7@@@^@@@@"dbA'!3,!,9'"3,!,;@'4oA@г\!t'.3,!,A'/3,!,B@А^c3'.'-'-'.'.'.'.'.@.H}|@@@,@C@D@@';3,!,>'<3,!,@@@@qp@@@,@@'C3,!,8'D3,!,C@@@y@@@@ຠ$code'P4,V,Z'Q4,V,^@࣠'delayedA'^4,V,g'_4,V,n@'qpA@@VU@@@,@@@,3'd'c'c'd'd'd'd'd@7Q@@@,@L@M@@@@'q4,V,f@$tailA'|4,V,p'}4,V,t@'qA@@@@@-3'~'}'}'~'~'~'~'~@-zy@@@,@@@,@,@-@@@@'4,V,o@#dstA'4,V,v'4,V,y@'rA@@ @@@-@@@-3''''''''@"0@@@-@+@,@@@@'4,V,u@@@ఐˠ"da'5,},'5,},@@@ M@-!@@@-%T@-3''''''''@#554@@@-@@@-@4@5@@@$code'5,},'5,},@6@@Ϡ@@@-$@@@-#@@-"ˠ!@@@- @@- @ఐ'delayed'5,},'5,},@m@@@@@-D@@@-CS@-PS@-N8@zఐ$tail(5,},( 5,},@d@@@@@-MS@-SS@-RN@ఐ#dst(5,},(5,},@X@@@@-K@@-JS@-VS@-Th@@s@@mS@-Fk@@ఐ "db(>5,},(?5,},@հ@@vM@-]@@@-aT@-Z@$code(L5,},(M5,},@@@IGF@@@-`@@@-_@@-^C@@@-\@@-[@Xఐ 'delayed(h5,},(i5,},@@@cb@@@-@@@-S@-S@-@ఐ$tail(5,},(5,},@ܰ@@@@@-S@-S@-@ఐ#dst(5,},(5,},@а@@  @@-@@-S@-S@-@@i@@cS@-@@(5,},(5,},@@@@ @@-@(4,V,a(5,},@@@@@,@@@,@@,@蠠@@@,@@@,@@,O@-c@'1delayed_use_count(6,,(6,,@డ'Eܠް(7,,(7,,@۰@@@f@@@-@@-@@@@-@@-@@@-@@-@@-3((((((((@@@@@ఐ "da(7,,(7,,@ʰ@@aF@@@-P@-@1delayed_use_count) 7,,) 7,,@f@@@@@-P@.P@-$@@ఐ"db) 7,,)!7,,@@@V@@@.P@.9@1delayed_use_count)-7,,).7,- @@@%@@@-P@.P@.G@@; @@ @@@-P@-M@@@)>3,!,T4@гi!t)H3,!,P)I3,!,Q@В@А!aq)S3,!,G)T3,!,I@@@А!bv)[3,!,L)\3,!,N@@@ @@@)_3,!,F@@#@@@LVA@M@.]@A@Z@ZY@~@ఠ#run)o:--)p:--@)sA@@@ !a@.KM@.@@@.M@.@@. > M@."@@@.$M@.@@.M@.3))))))))@@@@@@࣠@!dA):--):--@)tA@г(!t):--"):--#@А*/3))))))))@!D):--)<-F-g@@@):--):--!@@@<;@@@. @@):--):--$@@@D@@@@࣠$tailA);-0-9);-0-=@)uA@@ G@@@.33))))))))@'A\[@@@.@<@=@@@@);-0-8@#dstA);-0-?);-0-B@)vA@@ W V@@@.C@@@.B3))))))))@- k@@@.2@(@)@@@@);-0->@@ఐm!d*<-F-J*<-F-K@2@@j@@@.OR@.H3* * * * * * * * @0 ~ }@@@.A@@@.@@/@0@@@$code*<-F-L*<-F-P@@@   @@@.N@@@.M@@.L @@@.J@@.I @ )ภ"[]*8<-F-e@!@@@ 0 /@@@.n@@@.mQ@.}4@ ఐ$tail*M<-F-R*N<-F-V@[@@ @@@.wQ@.Q@.J@ ːఐ~#dst*c<-F-X*d<-F-[@T@@ ֠ @@.u@@.tQ@.Q@.d@@n@@Q@.pg@*w;-0-4@г#dps*:--**:---@А!a*:--'*:--)@@@ @@@@@A@M@.@A@@@@ఠ+reify_delay*>-i-o*>-i-z@*wA@@@ \*&lambda@@@.@@@.M@.@@. *&lambda@@@.@@@.M@.@@.M@.3********@/SL@M@N@@@࣠@#dpsA*>-i-|*>-i-@*xA@г+#dps*>-i-*>-i-@г01*>-i-*>-i-@@7@@@.3********@)O*>-i-k*I..@@@  @@@E @@@. @@*>-i-{*>-i-@@@M@@@@ຠY$code*?--*?--@࣠'delayedA+ ?--+ ?--@+yA@@  @@@.@@@.3++++++++@4Vts@@@.@@@.@T@U@@@@+"?--@$tailA+-?--+.?--@+@zA@@ @@@.3+/+.+.+/+/+/+/+/@0 + *@@@.@@@.@/@0@@@@+??--@#dstA+J?--+K?--@+]{A@@  @@@/@@@/3+P+O+O+P+P+P+P+P@"0 @@@.@+@,@@@@+\?--@@ఐ]'delayed+g@--+h@--@3@@ ^ ]@@@/ @@@/ 3+l+k+k+l+l+l+l+l@/  @@@/@@@/@.@/@@@ĠM+A--+A--@#@@@@ { z@@@/@@@/3++++++++@@@@ @  @@@/@@@/@@@ఐؠ#dps+A--+A--@@@@@@/)@@@/(@ %ఐ$tail+A--+A--@^@@ 0@@@/JT@/LT@/K1@ 1ఐ#dst+A--+A--@X@@ < ;@@/H@@/GT@/OT@/MK@@;@@$@@@/&O@Ġ"::+B-.+B-.@&ఠ!x+B-.+B-.@,|A@@ @@@/@ఠ"xs+B-.+B-. @,}A@@+^ @@@/@@@/@@@ @@  @@@/ @@@/@@  @@@/"@@@/!@@@డ#n0with_placeholder&Constr,'C. .,(C. .@ ,+C. .,,C. ..@@@ @@@)@@)@@@@@)@@@)@@),O@@@)@@(@@(,S@@@(@@(@@(@'"@@@ @@@/o@@/n@@@@@/m@@@/l@@/k@@@/j@@/i@@/h@@@/g@@/f@@/e3,e,d,d,e,e,e,e,e@z@{@|tm@n@o@@@@ఐ!x,yC. ./,zC. .0@@@ @@@/V@/V@/@@] @@@@JI@@@/@@@/@@/N@@@/@@/@@/M@@@/@@/~/@@࣠@'new_dstA,C. .8,C. .?@,~A@@ih@@@/@@@/3,,,,,,,,@H@@@@  @@ภ)Lsequence,D.C.M,D.C.V@;)Lsequence&E@&@@@ &@@@ @BO@V@A'_9))'`9))@@@(@ఐ D,write_to_dst,E.Y.e,E.Y.q@ e@@@( (@@@/@@@/@@/@ ; 8@@@/@@@/@@/@'@@@/@@/'@@@/@@/@@/@@/3,,,,,,,,@[@@@/@@@/@Y@Z@@@@ఐŠ#dst- E.Y.r-E.Y.u@@@(@(@@@/@@@/V@/V@/"@@ఐ'"xs-%E.Y.v-&E.Y.x@@@  |@@@/@@@/V@/V@/:@@ภ$Lvar-<E.Y.z-=E.Y.~@&Ơఐ'new_dst-HE.Y.-IE.Y.@O@@(y @@@/V@/@@@/V@/]@#var-ZE.Y.-[E.Y.@(@@&@@@/V@/V@/k@@-eE.Y.y-fE.Y.@@'z@@@/V@/s@@@@'@@@/@/V@/{@ఐ#dps-~F..-F..@g@@۠@@@/@@@/@ఐg$tail-F..-F..@=@@@@@0V@0V@0@ఐ'new_dst-F..-F..@@@@@0@@0V@0V@0@@;@@'@@@/@0V@0 @@-F..@@'@@@/@-C. .4@@@@@@/@@@/@@/@@@/@@/T@0 T@0'@@@@(@@@A-@--@@&@@@0RQ@-?---G..@@  ܠ @@@.@@@.@@. ؠ<@@@.@@@.@@.N@0s@ Q1delayed_use_count-H..-H..@A.H...H..@@ @@@0N@03........@@@@@@. >-i-#@г]!t.>-i-.>-i-@гbc.>-i-.>-i-@@i@@@n  @@@@o @19A@M@0@@A@=@=<@i@ఠ.ensures_affine.0K...1K..@.CA@@@m.J&lambda@@@0@@@0M@0@@0y.V&lambda@@@0@@@0M@0@@0M@03.M.L.L.M.M.M.M.M@@@@@@࣠@!dA.`K...aK..@.sA@г+!t.mK...nK..@г01.uK...vK..@@7@@@03.u.t.t.u.u.u.u.u@)O.~K...O/?/X@@@  @@@E @@@0 @@.K...K..@@@M@@@@డ,"<=.L/ /$.L/ /&@@!a@@@/@@@.$boolE@@@-@@,@@+*%lessequalBA@@@@)))Z@@U@@@@@@@0N@0@@0@ @@0@@@0@@0@@03........@Ln@@@0@@@0@l@m@@@@ఐ~!d.L/ /.L/ /@@@ ?@@@0O@0@@@0O@0$@1delayed_use_count.L/ /.L/ /#@ I@@5+@@A.L/ /'.L/ /(@@@O@06@@!@@@@@0O@0<@ఐ!d/M/./4/ M/./5@C@@Ǡ@@@0@@@0N@0N@0Q@ఐ+reify_delay/ O/?/E/!O/?/P@ΰ@@@@@@0@@@0@@0|{@@@0@@@0@@0p@@ఐҠ#run/AO/?/R/BO/?/U@@@@͠@@@0O@1$O@1@@@1@@1ˠ @@@0@@0@@ఐ!d/aO/?/V/bO/?/W@@@ @@@1P@1"P@1 @@/mO/?/Q@@&@@@1@@S@@jN@1@O@0@/xL/ / @г4!t/K.//K./@г9:/K../K./@@@ǰ@@@EȰ @@@@F@A@[M@1C@A-B/d r Ensures that the resulting term does not duplicate delayed constructors by reifying them now if needed. /P/Y/[/R//@@@@@@@#@#"@O@ఠ$make/T///T//@/A@@@n@@@1kM@1I@@@1OM@1E@@1F M@1S@@@1UM@1G@@1HM@1D3////////@y@@@@@࣠@#dpsA/T///T//@/A@г'#dps/T///T//@А!a/3////////@"D/T///U/0 @@@/T///T//@@@<;@@@1K @@/T///T//@@@D@@@@ఐm+reify_delay0U//0U/0@@@@hg@@@1^@@@1]@@1\cb@@@1[@@@1Z@@1Y300000000@2Mgf@@@1P@H@I@@@@ఐX#dps0-U/0>@?@@wv@@@1u@@-D@гs!t0=T//0>T//@А!a{'0DT//0ET//@@@* @@@@+@NXA@M@1_@A@\@\[@@ఠ1delay_constructor0VW0 00WW0 0#@0iA@@@@@@2GM@1@@1@10@@@1@@@1M@1@@1 ՠ0@@@2VO@1@@@1M@1@@1M@1@@1M@130{0z0z0{0{0{0{0{@@@@@@࣠@&constrA0W0 0$0W0 0*@0A@@2300000000@A0W0 00^1N1S@@@@@  @@!dA0W0 0+0W0 0,@0A@@;300000000@!I@@@@@@@@@ఠ!d0X0/070X0/08@0A@@sr@@@1@@@1P@1300000000@)Z@ @!@@@ఐ.ensures_affine0X0/0;0X0/0I@@@@@@@1@@@1@@1@@@1@@@1@@1!@@ఐN!d0X0/0J0X0/0K@+@@.@@#@@6/@A@0X0/03@@ຠW$code0Y0Q0W0Y0Q0[@࣠'delayedA1 Y0Q0d1 Y0Q0k@1A@@@@@1@@@1311111111@Tf_@`@a@@@@1Y0Q0c@$tail A1$Y0Q0m1%Y0Q0q@17A@@@@@131&1%1%1&1&1&1&1&@)"!@@@1@@@1@(@)@@@@16Y0Q0l@#dst A1AY0Q0s1BY0Q0v@1TA@@@@@1@@@131G1F1F1G1G1G1G1G@"0@@@1@+@,@@@@1SY0Q0r@@@ఠ(block_id 1_Z0z01`Z0z0@1rA@@$ @@@2S@131c1b1b1c1c1c1c1c@/נ@@@1@@@1@.@/@@@డ/$List&length1Z0z01Z0z0@ 1Z0z01Z0z0@@$@@@$@@@2 S@2@@@1@@1$<@@@1@@1/@@ఐ'delayed1Z0z01Z0z0@v@@$.@@@2 T@2 T@2 D@@. @@HE@A@1Z0z0 @@డ),delay_impure&Constr1[001[00@ 1[001[00@@ZX@@@)@@)@@@@)@@)@@)@@@)@@) 1U@@@) @@) @@) h@@@) @@)@@)@@)@ROA)$@@{y@@@2,@@2+@?@@@2*@@2)@@J@@@2(@@2'!@@@2&@@2%@@2$@@@2#@@2"@@2!@@2 322222222@@@@@@ఐ(block_id2[002[00@ @@@@@2IU@2KU@2J@@ఐ&constr2'[002([00@@@$@@m@@@@@@@2E@@2DW@@@2C@@2B@@2A@@@2@@@2?6@@࣠@&constr A2J[002K[00@2]A@@@@@2b32L2K2K2L2L2L2L2L@K@@@@ @@ఐ!d2_\002`\00@J@@à@@@2iV@2l@@@2pV@2h32h2g2g2h2h2h2h2h@h,@@@2a@&@'@@@$code2w\002x\00@ٰ@@trq@@@2o@@@2n@@2mn!@@@2k@@2j@ภ-R2\012\01@-QఐT&constr2\01 2\01@.@@@@@2U@2U@2U@2:@ఐ'delayed2\012\01@@@2@@@2U@2U@2M@@2\01 2\01@@@@@2U@2V@?ఐ$tail2\002\00@@@J@@@2U@2U@2l@Kఐ#dst2\002\00@{@@VU@@2@@2U@2U@2@@8@@@@@2U@2U@2@2[00A@@@R@@@2[@@2Z)@@@2Y@@2XS@2S@2@@NP@@@_Q@@@3Y0Q0^3\01@@   @@@1@@@1@@1@@@1@@1O@2 @|1delayed_use_count3']11%3(]116@ఐ}!d32]11933]11:@@@@@@3O@3@@@3O@333;3:3:3;3;3;3;3;@+@@@1delayed_use_count3E]11;3F]11L@@@$@@@3O@3 @@@3NX0/0O@@:@^@@@A@M@3 @A@@@@ A@YA@@ _@n@ x@  @ @@<@@@@@@33h3g3g3h3h3h3h3h@@@3p3q_1T1W@33n3m3m3n3n3n3n3n@@@@#dps M;!a@3@AA$tail3=@@@3@@3#dst0d0K@@@3@@@3@@3 N@3@@3@@3Y@@@@@3GI3G@1Q A term parameterized over a destination. The [tail] argument is passed by the caller to indicate whether the term will be placed in tail-position -- this allows to generate correct @tailcall annotations. 33Sh@@@@@@@@@3AA@!tN;!a@3A@A7A@G@B@@@3jl3ju@@@@3AA@$make@T3&lambda@@@3D@@@3F@@3J$3&lambda@@@3G@@@3I@@3K@3wy3w@@3A@#run@;3&lambda@@@3L@@@3N@@3R4&lambda@@@3O@@@3Q@@3S@33@@4A@1delay_constructor@+\!t@@@3T@@3]@f4"&lambda@@@3U@@@3W@@3[p4,&lambda@@@3X@@@3Z@@3\@@3^@4)4*@@4<A@&lambda@4?&lambda@@@3_@@3c4H&lambda@@@3`@@@3b@@3d@4E4F@@4XA@#map@@!a@3rO@3e@@3g!b@3tO@3f@@3h@@3o@@@@3j@@3m@@@3l@@3n@@3p@4p4qB@@4A@$pair@Π!a@3O@3u@@@3w@@3@ݠ!b@3O@3x@@@3z@@3~@@@@3{@@@3}@@3@@3@4CE4Ck@@4A@$unit4T@@@3@@@3@4ln4l@@4A@@БA+II4GQ4GT@АJM344444444@mS;@@3 @A@A^@@35@@@36@3 G@B@@@>;@@-@A4GN4GP@@1@e@@Aб_г[$bool4G\4G`@@c!@@б`г\+destination4Go4Gz@гa&offset4Gh4Gn@@i5@@@n6 @@А!ai:5G~e@@z<5Gdg@@>5GWi@@k24ېih@hh@@@h@h@@355 5 55555@@Awv@A+ii5jt`@Аil355555555@s;@@3@@A@A@G@B@@@p@@@m@A5,jq5-js@@1@{@@A@s@@35)5(5(5)5)5)5)5)@ @Ats@ss56w}57w@б@гr#dps5@w5Aw@гwx5Hw5Iw@@~35E5D5D5E5E5E5E5E@)@A@@@ @@г|!t5Tww@г5[w5\w@@@@@@@@@@@@5g5h@б@г!t5q5r@г5y5z@@35v5u5u5v5v5v5v5v@2@A@@@ @@г#dps5@г55@@@@@@@@@@@@55@б@г&Constr55@55@@@355555555@1@A @@б@г!t55@г55@@@@@ @@г!t5@г55@@&@@@'@@(@@)1@@@@@+55@б@г5 5@@355555555@=@A@@г!t5@г55@@@@@@@@@@@@6"6%@б@б@А366666666@%@A6)6+@@А6/61@@ @@б@г!t696:@А!a6%66&8@@@ @@г!t6.A@А!b(64>65@@@@+@@,@@-69(@@@@@0̠ʠʰ6ACI6BCM@б@гɠ!t6KCS6LCT@А36K6J6J6K6K6K6K6K@F@A6SCP6TCR@@@ @@б@г͠!t6^C[6_C\@А6dCX6eCZ@@@@@гѠ!t6mCj@В@А!a&6wCa6xCc@@@А!b.6Cf6Ch@@@1 @@@26C`@@4!@@ 53@@@@@7栰6lr6lv@г堐!t6l~@г預$unit6ly6l}@@366666666@P,*@A@@@@@@@@@/366666666@@A2366666666@J@@66C6@@H@E@I@A@C@D@B@@@66AJ@G@4l6 . The type ['a Dps.t] (destination-passing-style) represents a version of ['a] that is parametrized over a [lambda destination]. A [lambda Dps.t] is a code fragment in destination-passing-style, a [(lambda * lambda) Dps.t] represents two subterms parametrized over the same destination. 665@@@@@@@666[@\@'&ChoiceoO6~70776~707=@6A@БA+!tP67G7Q67G7R@А!a@4l366666666@@~A@HFA@:8@@@@@@`^@@4KJ@JJ@@@J@J@G/;@@4k@A@A@G@B@@@77G7I777@4̐ ? An ['a Choice.t] represents code that may be written in destination-passing style if its usage context allows it. More precisely: - If the surrounding context is already in destination-passing style, it has a destination available, we should produce the code in [dps] -- a function parametrized over the destination. - If the surrounding context is in direct style (no destination is available), we should produce the fallback code from [direct]. (Note: [direct] is also a function (on [unit]) to ensure that any effects performed during code production will only happen once we do know that we want to produce the direct-style code.) - [tmc_calls] tracks the function calls in the subterms that are in tail-modulo-cons position and get rewritten into tailcalls in the [dps] version. - [benefits_from_dps] is true when the [dps] calls strictly more TMC functions than the [direct] version. See the {!choice_makeblock} case. - [explicit_tailcall_request] is true when the user used a [@tailcall] annotation on the optimizable callsite. When one of several calls could be optimized, we expect that exactly one of them will be annotated by the user, or fail because the situation is ambiguous. 7'777(=6=;@@@@@@@@@7:A@@7+7G7N7,7G7P@@3@;B@A#dps@@!tOQ@4@@@47>7W7[7?7W7j@@7QA&direct@@@6@@@4@@4bQ@4@@47P7k7o7Q7k7@@7cA)tmc_calls@@6ʠ5@@@4@@@47a777b77@@7tA1benefits_from_dps@@7@@@47m777n77@@7A9explicit_tailcall_request@@7+@@@47y777z77@@7A@@A@_@@@@@fc@@U@#OOE77W7^@D@@Ш@гR#Dps77W7d77W7g@Y77W7h77W7i@@А!a_77W7a77W7c@@@h @@k@@4@b@#^^S77k7u@R@@Ш@б@г_$unit77k7x77k7|@@g@@А!agİ77k777k7@@rǰ @@u@@4@k@#gg]777@\@@Ш@гj$list777777@гo4tmc_call_information777777@@w@@@| @@@@4@v@#rrm777@l@@Ш@гu$bool777777@@}@@@@4@|@#xxs777@r@@Ш@г{$bool777777@@@@@@4 @@@A@⠰57͐@@@@@@@@388888888@@@@ఠ&lambda8===C8===I@8%A@@@8(&lambda@@@4Q@4@@4F83&lambda@@@4@@@4Q@4@@4Q@438*8)8)8*8*8*8*8*@?O@@@࣠@!vA8<===K8====L@8OA@г%&8H===O8I===U@@,@@@438H8G8G8H8H8H8H8H@@8Q===?8R==@@@  @@8U===J8V===V@@@9 @@@@Р3+3@@4.@@@3 @@A@A@3@@B@A@3@@C@A@3 @@D@A@@A*@'#dps8l=f=j8m=f=m@డ9&lambda#Dps8{=f=p8|=f=s@ 8=f=t8=f=z@@@8R@@@4@@4Tݠ8R@@@4@@@4@@4@Q@N@@@@@@4@@4@@@4@@@4@@4388888888@Xq@@@4@k@l@@@@ఐ{!v8=f={8=f=|@@@4@@@4S@4S@4@@D @@@@@4@@@4S@4$@f&direct8=~=8=~=@࣠@4 AĠ8=~=8=~=@@@@@@@@5=@@@@ఐ!v8=~=8=~=@F@@@@@5T@5N@8=~=8=~=@@@@@@5@@5 @@@5 @@5 R@5]@)tmc_calls9==9==@ภװ9==9==@0@@@@@@50@@@5/R@56v@1benefits_from_dps9 ==9!==@ภ'9'==9(==@'@@@@@@5?R@5C@ʡ9explicit_tailcall_request95==96==@ภ'ְ9<==9===@'@@@@@@5KR@5O@@@9E===d@г$!t9O===`9P===a@г)*9W===Y9X===_@@0@@@5 @@@@6@ A@FQ@5W@A@@ @0@ఠ#map!9j==9k=>@9}A@@@@@@5Q@5s@@5@@5Q@5p@@5Q@5Y@@5Z@,@@@5Q@5_@@5`2Q@5g@@@5iQ@5a@@5bQ@5[@@5\Q@5X399999999@g@@@@@࣠@!f"A9=>9=>@9A@@3@@@@!s#A9=>9=>@9A@@-399999999@!D@@@@@@@@Рa#dps9> >9> >@డ#map#Dps9> >9> >@ 9> >9> >@@@@@@4@@4@@4@[@@@4@@4_@@@4@@4@@4@@|@@@@}@@5vy@@5u@@5t@p@@@5r@@5qt@@@5o@@5n@@5m399999999@O[~@R@S@@@@ఐp!f:> >:> >@[@@@@ఐq!s:> >: > > @@@@#dps:&> >!:'> >$@˰ @@@@@5T@5T@5.@@` @@@@@5kT@55@֡&direct:>>&>*:?>&>0@࣠@6 $AĠ:K>&>8:L>&>:@@@@@@@@5N@@@@ఐ!f:\>&>>:]>&>?@@@\@@ఐ!s:m>&>A:n>&>B@j@@m@&direct:t>&>C:u>&>I@ @@@2@@@5@@5Q@5Q@5Q@5@@5@@ภ7:>&>J:>&>L@6@@@G@@@5W@5@@:>&>@:>&>M@@@@;@@@:>&>3:>&>N@@@W@@@5@@5%S@5@@5S@5@A)tmc_calls:>P>T:>P>]@ఐ!s:>P>`:>P>a@@@0@)tmc_calls:>P>b:>P>k@Z @@ji@@@5@@@5S@5@d1benefits_from_dps:>m>q:>m>@ఐ+!s:>m>:>m>@ְ@@T@1benefits_from_dps:>m>:>m>@} @@}@@@5S@5@9explicit_tailcall_request:>>:>>@ఐK!s:>>:>>@@@t@9explicit_tailcall_request;>>;>>@ @@@@@5S@5@@@; => ; >>@@}@iA@Q@5y@A8:ᐠ - Apply function [f] to the transformed term. ;>>;>?@@@@@@@;==@@@@ఠ&direct%;+??;,??@;>A@@@X!a@5Q@5@@@5Q@5@@5@@5Q@53;=;<;<;=;=;=;=;=@@@@@@࣠@!c'A;P??;Q?? @;cA@г !t;]??&;^??'@А"'3;];\;\;];];];];]@!<;f??;g?0??@@@;i??#;j??%@@@43@@@5 @@;q??;r??(@@@<@@@@ఐ3!c;?0?4;?0?5@LK@@@5@4@5@@,RQ@6@@@6T@53;;;;;;;;@.H@@@&direct;?0?6;?0?<@4@@@S@@@6@@6@@5@@ภS;?0?=A@Q@B@@b@@@6 S@6@@/H@А!a*Q@5(;??+;??-@@ @@+@JTA@Q@6[@A@X@XW@|@ఠ#dps(;?A?G;?A?J@;A@@@;&lambda@@@6@@@6Q@6@@6$tailc@@@6]Q@6!@@6"#dsthg@@6[@@6ZQ@6'@@6(<  @@@6QQ@6)@@6*Q@6#@@6$Q@6@@6Q@63<<<<<<<<@@@@@@࣠@!c*A<?A?L<?A?M@<(A@гG!t<"?A?W<#?A?X@гLM<*?A?P<+?A?V@@S@@@63<*<)<)<*<*<*<*<*@)k<3?A?C<4?g?@@@  @@@a @@@6 @@<<?A?K<=?A?Y@@@i@@@^^+Ab@@@@!b@7Q@6w@@@6@@6Q@6p@@6qK@Q@6@Q@6@@6@@@6Q@6r@@6sQ@6o3=2=1=1=2=2=2=2=2@1tm@n@o@@@࣠@92A@ఠ"c1/=J??=K??@=]A@@>=@@@63=M=L=L=M=M=M=M=M@W=V??=W@@@@@@@ఠ"c20=`??=a??@=sA@@GF@@@6@@=i??=j??@В@гb!t=x??=y??@Аdi+=~??=??@@@po@@@6v2 @@@гj!t=??=??@Аlq@=??=??@@@xw@@@6yG @@@@@ @@6zN#@@=??=??@@@R@@@@РM#dps=??=??@డ|$pair#Dps=??=??@ =??=??@@@? M@@@4@@4@G F@@@4@@4K@ ]@ P@@4@@@4@@4@@4@ ?@ <#@@@ZQ@7uQ@7FQ@6Q@6@@@6@@6@iQ@7{Q@7MQ@7Q@6@@@6@@6t@@@@6@@@6@@6@@63>>>>>>>>@@@@@@@@@ఐР"c1>??>??@@@)??>*??@ΰ@@K@@@6S@6S@6+@@ఐࠐ"c2>@??>A??@5@@SQ@6@@@6S@6B@#dps>O??>P??@@@ˠb@@@6S@6S@6Q@@ @@)@2@1@@6@@@6S@6^@&direct>m??>n??@࣠@::1AĠ&>z??>{??@%@@@@4@@@6w@@@@@ఐG"c1>??>??@@@8@@@6V@6@&direct>??>??@=@@@\@@@6@@6@@6@@ภ\>?@>?@@[@@@l@@@6U@6@@(@@@@ఐf"c2>?@>?@@@@m@@@7V@7@&direct>?@>?@ @r@@@@@@7@@7@@7@@ภ>?@>?@@@@@@@@7 U@7@@(@@@@>??>?@@@@ @@@7@>??>?@@@@@@@6@@6@ՠ@@@6@@6R@7@)tmc_calls?@@?@@!@డ=!@?@$@7?@$@8@@$listK!a@@@@@@@ @@@@@@@@@@@@@)nn)nn@@)@%$@@@"@@@7'R@7PR@7DR@7,@@@70@@7/@$@@@7.@@7-#@@@7+@@7*@@7)S@@ఐ"c1?h@$@*?i@$@,@^@@@@@7ES@7Bh@)tmc_calls?u@$@-?v@$@6@@@[9@@@7@S@7GS@7Cw@@ఐ,"c2?@$@9?@$@;@@@3@@@7LS@7I@)tmc_calls?@$@<?@$@E@7@@p]@@@7>S@7NS@7J@@= @@P^@@@7&S@7<@G1benefits_from_dps?@G@K?@G@\@డ>$"||?@_@z?@_@|@@@@@]@@\@&@@@[@@Z*@@@Y@@X@@W'%sequorBA)@@@@))@@)^@! @@@@@@7`@@7_@@@@7^@@7]@@@7\@@7[@@7Z@@ఐ"c1?@_@e?@_@g@@@@@@7tS@7r@1benefits_from_dps@@_@h@@_@y@@@K@@@7pS@7vS@7s@@ఐ"c2@@_@}@@_@@@@Ġ(@@@7zS@7x@1benefits_from_dps@*@_@@+@_@@ǰ@@f@@@7nS@7|S@7y+@@; @@@@@7XS@7l1@ա9explicit_tailcall_request@@@@@A@@@డ>@J@@@K@@@@@@@@@7@@7@@@@7@@7@@@7@@7@@7U@@ఐ "c1@j@@@k@@@`@@\@@@7S@7j@9explicit_tailcall_request@w@@@x@@@@@@@@7S@7S@7x@@ఐ-"c2@@@@@@@@@4r@@@7S@7@9explicit_tailcall_request@@@@@@@6@@@@@7S@7S@7@@; @@ 3@@@7S@7@@@@??U@г!t@??@??@В@А!a@??@??@@@А!b@??@??@@@ @@@°@??@@#@@@,wA@Q@7~@A@{@{z@@ఠ$unit3@@A@@A@@A@@ 9@@@7Q@7@@@7Q@73@@@@@@@@@@@@@@Р#dps@A A@A A@డ!$unit#DpsAA AAA A@ AA AA A A@@ a@@@4@@@4@ `@ ] @@ 4@@@7Q@7/@&directA AA#A!AA)@࣠@<4AĠٰA-AA1A.AA3@@@@@ @@@7H@@@@ภA:AA7A;AA9@@@@@@@7U@AAAA,ABAA:@@@ @@@7@@7gQ@7@@7Q@7c@론)tmc_callsATA<A@AUA<AI@ภ$A[A<ALA\A<AN@8@@@  @@@7@@@7Q@7|@ 1benefits_from_dpsAmAPATAnAPAe@ภ0AtAPAhAuAPAm@0@@@ @@@7Q@7@ 9explicit_tailcall_requestAAoAsAAoA@ภ0#AAoAAAoA@0#@@@ @@@7Q@8@@@A@A AAA@@@A@A@@@@@&Syntax=QAB]BfAB]Bl@AA@Б@ఠ$let+5ABvB~ABvB@AA@@@ `E@8@@@8(R@8@@8@@@@8+S@8@@8*R@8 @@8  t@@@8&R@8 @@8 R@8@@8R@83AAAAAAAA@@@@@@࣠@!a7AABvBABvB@AA@@,3AAAAAAAA@;ABvBzABvB@@@@@  @@!f8AABvBABvB@B A@@33AAAAAAAA@!C@@@@@@@@ఐ#mapB BvBB BvB@Ȱ@@@@T@@8F@@8@@8@ [@@@8@@8 Q@@@8@@8@@83BBBBBBBB@&2[@)@*@@@@ఐ9!fB.BvBB/BvB@ @@h@@ఐZ!aB;BvBO@>P@@@@4Q@@l@[RA@R@81Y@A@V@VU@l@ఠ$and+9BMBBBNBB@B`A@@@I@8C@@@8VR@83@@84@I@8D@@@8WR@89@@8:C@@ @@8S@@@8RR@8;@@8@@@@ఐQ"a2BBBBBB@@@ @@BBB^@@@@@@8UU@8`*@@Jg@@+@qhA@R@8do@A@l@lk@@M@@@@@3BBBBBBBB@@@CB]BoCBB@ 3BBBBBBBB@.@@@@CB]B_@@Рs&SyntaxCBBCBB@@ 3CCCCCCCC@B}@o@"@@@|@@@@A3CCCCCCCC@ @@C"BB@@@3CCCCCCCC@ @@@ఠ&option>C0BBC1BB@CCA@@@B a!a@8R@8z@@@8@@@8R@8v@@8w oBR@8@@@8@@@8R@8x@@8yR@8u3CTCSCSCTCTCTCTCT@:@@@࣠@!c@ACeBBCfBB@CxA@г0&optionCrBBCsBB@г5!tC{BBC|BB@А7<3C{CzCzC{C{C{C{C{@bUCBBCC2CV@@@CBBCBB@@@IH@@@8| @@@R@@@8~  @@CBBCBB@@@Z@@@@ఐ?!cCBCCBC@hgf@@@8@@@8@D@E  @@qpo@@@8@@@83CCCCCCCC@6Y@@@Ġ$NoneCC CCC C@0@@@@@@@8@@@83CCCCCCCC@@@@ @@@@8@@@8 @@@$let+CC CCC C@@ %@@@8l@@8k@@.@@8j @@8i@@8h #@@@8g@@8f@@8e@>@?@ T@@@8U@8V@8@@@8V@8@@8@@@@8@@@8U@8U@8@@8@@8  V@8@@@8V@8@@8@@8V@8ఐH$unitD$C C%D%C C)@N@@ ˠ.@@@8U@8a@RD.C C1@@%paramBĠD7C C D8C C"@@@@@:n@@@ภ$NoneD@C C-@1E@@@4v@Ag@@@@@8@@@8@Ġ$SomeDUC2C8DVC2C<@-ఠ!cAD^C2C=D_C2C>@DqA@@"!@@@8@@@@@+*)@@@8@@@8@ @321@@@8@@@8@@@m$let+D~C2CBDC2CF@@ *IR@8V@8@@@8V@8@@8@@ @@8IH@@@8U@8U@8@@8@@8 C V@8@@@8V@8@@8@@8V@8ఐO!cDC2CKDC2CL@N@O@P@@ U+@@@8U@83DDDDDDDD@_ @@@<5@@!vCDC2CGDC2CH@DA@@8@@@ภ$SomeDC2CPDC2CT@._ఐ!vDC2CUQ@J@@S@@K3DDDDDDDD@" @@@@V@@D@A^W@@3DDDDDDDD@%@@@@@ADBCZ@г!tDBBDBB@г&optionDBBDBB@А!a+DBBDBB@@@. @@@/@@@@0@ixA@R@9@A@|@|{@Aఠ$listDE CXCbE CXCf@EA@@@D8!a@9R@9 @@@9+@@@9*@@9)DDR@9#@@@9(@@@9'@@9&3E*E)E)E*E*E*E*E*@@@@@@࣠@!cEAE=CXChE>CXCi@EPA@гD$listEKCXCqELCXCu@гo!tEUCXCoEVCXCp@А:?R@943EVEUEUEVEVEVEVEV@-V@SRQ@@@9!@@@9"S@9@@9MLK@@@9$@@@9%S@9@@9S@9@j@k@@EyCXClEzCXCn@@@-$@@@96$*@@@<@@@98) 9@@ECXCgECXCv@@@uts@@@9D@@@9C5@@  @@ఐa!cECCECC@ZSJ@@@9B@@@9A@f@g  @@c\S@@@9S@@@9R3EEEEEEEE@U{@@@ĠECCECC@=H@@@@yri@@@9[@@@9Z3EEEEEEEE@@@@ @{r@@@9]@@@9\ @@@$let+ECCECC@@ 8@@@9U@9{V@9x@@@9zV@9@@9@@@@9}EiR@9I@@@9U@9U@9|@@9~@@9 V@9t@@@9sV@9@@9@@9V@9qఐ.$unitF CCF CC@4@@ 0@@@9U@9N@?FCC@@HĠ!ȰFCCFCC@!@@@@;Z@@@ภF$CC@=@@@4a@AR@@H54@@@9p@@@9ok@ĠSF9CCF:CC@@ఠ!cFFBCCFCCC@FUA@@@@@9e@ఠ"csGFQCCFRCC@FdA@@E @@@9g@@@9f@@@ @@ @@@9i@@@9h@ @"@@@9k@@@9j@@@d$let+FuCCFvCC@@!@mR@9@Es@@@9U@9@@9V@9@@@9V@9@@9@@@@9@@@9U@9U@9@@9@@9F V@9@@@9V@9@@9@@9V@9ఐn!cFCCFCC@m@n@o@@ 3R@9@@@9U@93FFFFFFFF@ rk@l@m@@@LFCD@$and+FCCFCC@@ v@@@8t@@8s@ q@@@8r@@8q @@{@@8p@@@8o@@8n@@8m@@@ ݠ7@@@9V@9@@9@ ڠsU@9U@9U@9@@@9V@9@@9 ؠ@P@@@9@@@9V@9@@9@@9V@9ఐ $listGCCGCC@@@@ @@@9@@@9@@9@@@9@@@9@@9p@@ఐ堐"csG6CCG7CC@y@@*)(@@@9@@@9V@9V@9@@1@@ +Q@@@9V@9@GMCC@@K@ఠ!vI GZCC@GlA@@B@9@@ఠ"vsJGfCCGgCC@GyA@@n@9@@A@@@@@9@@@ภB8GwCDGxCD@B7ఐ'!vGCDGCD@'@(@)@@(3GGGGGGGG@2&@ @!@@@ఐ+"vsGCD@ @@)@@@@@A @@n3GGGGGGGG@@@@@@AGCC@гt!tGCXCGCXC@г$listGCXC|GCXC@А!aGCXCyGCXC{@@@@@@:S@9K @@@ @@@:S@9M@@+@@@<A@@@@@:)@@@:(@@:'@@@:&@@@:%@@:$R@:}@@@GCXCZ@@@A+/tmc_call_searchLRGE EGE E"@А!a@:,3GGGGGGGG@;@@:*@A@A@G@B@@@GE E GEbE@E The [find_*] machinery is used to locate a single subterm to optimize among a list of subterms. If there are several possible choices, we require that exactly one of them be annotated with [@tailcall], or we report an ambiguity. HD D HDE@@@@@@@@@HA&zipperMR;@@:+@A@A@G@B@@@HEEHEE@@@@H'A@@HE EHE E@@D@;1@A+No_tmc_callNG>S@:-@@@:/@@H+E%E)H,E%EA@@H>A,NonambiguousO-OS@:1@@@:3@@H<EBEFH=EBEa@@HOA)AmbiguousP(explicitQ@@G@@@:5HMEbEwHNEbE@@H`A(subtermsR@@GǠysS@:8@@@::@@@:<HaEbEHbEbE@@HtA@@HeEbEfl@@HwA@@A@_@@@@@qn@@`@#MMHnE%E+HoE%E6@C@гO$listHxE%E=M@А!aVH~E%E:HE%E<@@@]U@@@@W@#SSHEBEHHEBET@I@гU&zipperHEBE[S@А!a\HEBEXHEBEZ@@@c[@@@@]@#YYHEbEhHEbEq@8@#[[VHEbE@U@@Ш@г^$boolHEbEHEbE@@f@@i@@:6@e@#aaTHEbE@S@@Ш@гd$listHEbEHEbE@гi!tHEbEHEbE@А!aq߰HEbEHEbE@@@x @@@}@@@@:=@t@@@p@@A@ܠFH@@@@@@+נװHEEHEE@А!a@:@HEEHEE@@E@;@A*rev_beforeS@@HjS@:A@@@:CHEEIEE@@IA&choiceT@@'"S@:G@@@:IIEEIEE@@I!A%afterU@@H1S@:M@@@:OIEEIEE@@I0A@@A@_@@@@@@@@ @#00(I'EE@'@@Ш@г3$listI0EEI1EE@А!a;HI7EEI8EE@@@BK @@E@@:DN@>@#::2I@EE@1@@Ш@г=!tIIEEIJEE@А!aEaIPEEIQEE@@@Ld @@O@@:Jg@H@#DD<IYEE@;@@Ш@гG$listIbEEE@А!aNyIhEEIiEE@@@U|M@@X@@:P@Q@@A@Z@@uY@3IiIhIhIiIiIiIiIi@@@@ఠ:find_nonambiguous_tmc_callVIzEEI{EF@IA@@@H3!a@=)Y@=@@@=S@=@@@=S@:@@:S@<@@@IF#FIIF#FK@@!a@@@ @@@6@@@@@@@)%notequalBA3@@@@3~QQ3~Q@@3R@@@@Ƞ@@@:@@@:V@:@@:@ @@:T@@@:@@:@@:3J(J'J'J(J(J(J(J(@BNc@E@F@@@@ఐW!cJ<F#F=J=F#F>@@@r@)tmc_callsJCF#F?JDF#FH@ @@'@@ภ JNF#FL^@A@_@@3V@:%@@b@@}&@lcA@U@:j@A@g@@ఠ+is_explicit\J`FRFZJaFRFe@JsA@@@@:@@@:U@:@@:@@@:U@:@@:U@:3JqJpJpJqJqJqJqJq@@@@@@࣠@!s^AJFRFfJFRFg@JA@@3JJJJJJJJ@-JFRFVJFRF@@@@@  @@ఐ!sJFRFjJFRFk@2@@@@33JJJJJJJJ@"@@@9explicit_tailcall_requestJFRFl@> @@2@"A@BU@: @A@@@ఠ,nonambiguous_JFFJFF@JA@@3only_explicit_calls@@@;fU@:@@:@J(7S@:@@@L(H#H?@-@@Р@@@;=]@;?]@;>9@@) @@i@@@;.@;@]@;;A@@డJ  LEH#H\LFH#H^@ @@@ @@@;H@@;G@ @@@;F@@;E @@@;D@@;C@@;B`@@డJ#notLeH#HDLfH#HG@@@@@O@@N@@@M@@L(%boolnotAA6\@@@6ZLL6[Lt@@6Y\@@@@@@@;]@@;\@@@;[@@;Z@@ఐ3only_explicit_callsLH#HHLH#H[@@@@@/@@ @@@;X@;h^@;d@@ఐG+is_explicitLH#H_LH#Hj@ɰ@@@P@@@;m@@;l>@@@;k@@;j@@ఐ(!cLH#HkLH#Hl@Ű@@h@@@;w^@;y^@;x@@$ @@ @@@;V@;z^@;u@@LH#HCLH#Hm@@@@@;,@;{]@;T@@ @@9@@@;|\@;*@ະ3@@:@@@3@@A@A@3@@B@A@@A@*rev_beforeLHsHLHsHAఐ @@@&choiceMHsHMHsH@ఐs!cM HsHM HsH@@@ \@;@@@;[@;@)%afterMHsHMHsH@డK$List#mapM*HsHM+HsH@ M.HsHM/HsH@@@@!a@t@@!b@q@@@@@C@@@@@C@@@@@@@@BB@@BW@+&@@@@(L[@;@@@;[@;@@;M@@;@@;@#@@@;@@;"X@@@;@@;@@;x@@ఐP&directM{HsHM|HsH@t@@@'@@;l@@;\@;@@ఐ砐$restMHsHMHsH@@@O;@@@;\@;\@;@@p @@\@;@@@;\@;@@@MHsHMHsH@@"@@@;@ఐ%splitMHHMHH@j@@@@@;@@@;@@@;@@;@@;@@ภHMHHMHH@Hఐ&directMHHMHH@ΰ@@@@@@;@@;@@;@@ఐS!cMHHMHH@@@@@@;]@;]@;@@! @@@ఐ*rev_beforeMHHMHH@@@@@NHHNHH@@X@; @@ఐi$restNHHNHH@@@@@b@@t[@;\@;@NH#H- @@!@@A<gNGG @б@г$listN'GGN(GG@г[!tN0GGN1GG@АbN6GGN7GG@@@ X@: @@@X@:@@г&zipperNDGGNEGG@А!awNKGGNLGG@@@wv@@@<$Y@: @@@2@@<% @@<#Y@:%@@@KA@@G@@<0@>@@U@<\@@@$List&filterNI4I:NI4I>@ NI4I?NI4IE@@@@!a@@@@$boolE@@@@@@@@Dʠ@@@@@9@@@@@@@@D^-)-)D^-)-X@@Do@,'@@@@F@@A@@hf@@@@ఐw-has_tmc_callsO:I4IPO;I4I]@İ@@@S@JJPJ>J[@PA@@EW@= @@@=W@=3PPPPPPPP@@' @!@"@@@డOE$List&filterPJ>J^PJ>Jb@ PJ>JcPJ>Ji@@@@@@"@@=@@@=@@= @@= @,@@@= @@= 80@@@=@@=@@=/@@ఐ+is_explicitQ J>JjQ J>Ju@+@@@@@@=-@@=,@@@=+@@=*G@@ఐr0several_subtermsQ!J>JvQ"J>J@Q@@1]@@@=X@=3X@=2\@@M @@b]@A@Q.J>JF @@ఐs1explicit_subtermsQ8JJQ9JJ@r@s@t@@yq@@@=53Q;Q:Q:Q;Q;Q;Q;Q;@q@@@Ġ'QKJJQLJJ@H@@@@@@@=:3QMQLQLQMQMQMQMQM@@@@@@@@=;@@@ภ)AmbiguousQ]JJQ^JJ@; @ʐ # {@@@:@AB@C@A @;A 'BA@O@B@@@Q>@@@QA ຠ3 .@@=V 0@@@3 ' &@@AA @ A .@ +(explicitQJJQJJ@ภ@ QJJQJJ@@ @@@ C@@@=dX@=h<@(subtermsQJK QJK@ఐ0several_subtermsQJKQJK&@Ͱ@@ N@@@=uX@=wT@;@QJJQK(K5@@J S@=N@@@=RX@=_@@U @@`@ĠQK6KBQK6KHAL{ఠ$_onem QK6KF@QA @@S@=yS@=1Z@=?3QQQQQQQQ@@@@ĠQK6KGAI`@@A@Q1@@@=D @@@QK6K@@@@@@=E@@@@@=F@@@ภ,NonambiguousQKLKXQKLKd@ఐC,nonambiguousQKLKfQKLKr@,@@@<@@@=@@=@Q_76@@@=@@@=@@=32@@@=@@=@@=3R R R R R R R R @QK@L@M@@@Zภ@ȰRKLKRKLK@@@@@_@@@=Y@=@@ఐ'choicesR,KLKR-KLK@R@@ @@R0KLKeR1KLK@@ S@=@@@=X@=Y@=-@@T @@.@ఠ9several_explicit_subtermsnRGKKRHKK@RZA@@@@@=H@@@@@=I@@@ภ)AmbiguousRYKKRZKK@ຠ3 @@= @@@3  @@AA @ A @ (explicitRkKKRlKK@ภA RrKKRsKK@A@@@ /@@@=X@=3RuRtRtRuRuRuRuRu@;92@3@4@@@(subtermsRKLRKL @ఐE9several_explicit_subtermsRKL RKL&@@@ = @@@=X@=@*@RKKRL(L5@@9 S@=@@@=X@=&@@H @@ '@@@ARJJ@@ Q@v@@ @@@ARIpIt@@ @(@@ @@@ @@@ 3@@@ @A@ -S@>@A@@@ @A@@Np@@@@@"@@@@ @  f@  A@  B@ S L@ M@ N@@3RRRRRRRR@ , V@@R~707@RLBLE@"3RRRRRRRR@@@@PR  The TMC transformation requires information flows in two opposite directions: the information of which callsites can be rewritten in destination-passing-style flows from the leaves of the code to the root, and the information on whether we remain in tail-position flows from the root to the leaves -- and also the knowledge of which version of the function we currently want to generate, the direct version or a destination-passing-style version. To clarify this double flow of information, we split the TMC transform in two steps: 1. A function [choice t] that takes a term and processes it from leaves to root; it produces a "code choice", a piece of data of type [lambda Choice.t], that contains information on how to transform the input term [t] *parameterized* over the (still missing) contextual information. 2. Code-production operators that have contextual information to transform a "code choice" into the final code. The code-production choices for a single term have type [lambda Choice.t]; using a parametrized type ['a Choice.t] is useful to represent simultaneous choices over several subterms; for example [(lambda * lambda) Choice.t] makes a choice for a pair of terms, for example the [then] and [else] cases of a conditional. With this parameter, ['a Choice.t] has an applicative structure, which is useful to write the actual code transformation in the {!choice} function. Ra1Y1YR}7-7/@@@@@@@R~7070@@Р&Syntax&ChoiceRLGLLRLGLR@ RLGLSRLGLY@@@3RRRRRRRR@ +@A@l@@@D@@55@s@e@@@@r@@ @ @ ; A@  -B@ V@@PАML@LL@@@L@L@IP@@@@A3S$S#S#S$S$S$S$S$@/B@@S,LGLG6@@7@3S)S(S(S)S)S)S)S)@3@@A+'contextpSS8!L[L`S9!L[Lg@@;@@+specialized@@O#Map!t+specializedqS@@@C@@@CSP"LlLnSQ"LlL@@ScA@@A@@@@@ST!L[L[SU#LL@@@ASgA@# S\"LlLy@ @@Ш@г%IdentSi"LlLSj"LlL@'Sm"LlLSn"LlL@@+Sr"LlLSs"LlL@ @г.+specializedS|"LlL{S}"LlL@@63SySxSxSySySySySy@WM;@@@A@@@@@0@@@-8;@@@A@@@@@S$LLS(LL@@@@SA@@ @@@J @@M@@C@>@@A@:@+DDS$LLS$LL@@;@@%arity@@Sq@@@NS%LLS%LL@@SA&dps_id@@PF!t@@@NS&LLS&LL@@SA+direct_kind@@S-function_kind@@@NS'LLS'LL@@SA@@A@@@@@7@@@4@#((#S%LL@"@@Ш@г+#intS%LLS%LL@@3N@@6@@NQ@2@#..'S&LL@&@@Ш@г1%IdentS&LLS&LL@8S&LLS&LL@@@@g@@C@@Nj@=@#993S'LL@2@@Ш@г<=S'LLS'LL@@Cx@@F@@N{@A@@A@t@@s@3SSSSSSSS@@@@ఠ%lletsT*LLT*LL@TA@@@E_@@@OET@N@@N@Oo@@@OFT@N@@N@<Ơ@Ev@@@OGX@O/@NK@@@OHX@O0@@O1X@O @@@O%T@N@@N@NW@@@OIT@N@@NT@O@@OT@N@@NT@N@@NT@N@@NT@N3TFTETETFTFTFTFTF@$@@@࣠@"lkATY*LLTZ*LL@TlA@@M3TXTWTWTXTXTXTXTX@\Ta*LLTb-MXMi@@@@@  @@"vkATm*LLTn*LL@TA@@V3TlTkTkTlTlTlTlTl@!d@@@@@@@@(bindingsAT~*LLT*LM@TA@@\3T}T|T|T}T}T}T}T}@j@@@@@@@@$bodyAT*LMT*LM @TA@@O3TTTTTTTT@p@@@@@@@@డS $List*fold_rightT+M MT+M M@ T+M MT+M M@@=c@@@@@@O@uX@O@@O@@O@@O@@O @=]@@@O @@O @@@O @@O@@O@@O3TTTTTTTT@5A@8@9@@@@࣠@PA@ఠ#varT+M M$T+M M'@TA@@3TTTTTTTT@@@@@ఠ#defT+M M)T+M M,@TA@@ @@T+M M#T+M M-@@@Ġ@@@O3@@ @@$bodyAU+M M.U+M M2@UA@@L3UTTUUUUU@@/@)@*#@@@@@@  @@ภ$LletU,M6M:U,M6M>@FdఐƠ"lkU,M6M@U,M6MB@@@3UUUUUUUU@'i@@@@@ఐ"vkU*,M6MDU+,M6MF@@@@ఐX#varU5,M6MHU6,M6MK@/@@@ఐV#defU@,M6MMUA,M6MP@9@@ $@ఐM$bodyUK,M6MRUL,M6MV@,@@/@@=UO,M6MW@@Oa@@@OD4@UT+M MUU-MXM[@@@3@@O*@@@O)@@O(@@O'Y@OYY@OU@@ఐ(bindingsUl-MXM\Um-MXMd@ٰ@@I@@ఐ$bodyUy-MXMe@@@7@@@@@$A@sT@Oe"@A@@@5@ఠ.find_candidateU/MkMoU/MkM}@UA@@@O@@@OkT@Og@@OhDP)lfunction@@@O|T@Oy@@@OzT@Oi@@OjT@Of3UUUUUUUU@]@@@@@@Ġ)LfunctionU0MMU0MM@;)LfunctionO?@@@@ @AD@V@APU)&&PV)&&@@@Q@ఠ$lfunU0MMU0MM@UA@@,@@@Om3UUUUUUUU@*JU/MkMkU1MM@@@@@@" @@B@@ఐ$lfunU0MMU0MM@@@@@H@@@Ot@Or3UUUUUUUU@) @@@$attrU0MMU0MM@3$attrU@@@ QK2function_attribute@@@ @@D3$kind QS-function_kind@@@ @@@@@PJ++PJ++@@QW"@3¶msNx@O!t@@@ ؠ@Qn@@@ @@ @@@ @@A"@@PK++PK+,@@Qq#@3&return0Qx@@@ @@B+@@PL,,"PL,,5@@Qz$@3$body9P@@@@ @@C4@@PM,6,:PM,6,G@@Q%@B3#locBN@@@ @@E=@@PO,,PO,,@@Q'@@@PN,H,LPN,H,e@@Q&@aQ@@M@@@Ov@Os]@-tmc_candidateVM0MMVN0MM@3-tmc_candidateX@@@ $boolE@@@ @@F#3&inline Q0inline_attribute@@@ @@@@AP#$P#$@@Q@3*specialiseQ4specialise_attribute@@@ @@A@AQ$$Q$$?@@Q@3%local"Q/local_attribute@@@ @@B@AQ$@$BQ$@$Y@@Q@3$poll-Q.poll_attribute@@@ @@C)@AQ$Z$\Q$Z$q@@Q@3,is_a_functor85@@@ @@D3@AQ$$r$tQ%$r$@@Q@3$stubB?@@@ @@E=@AQ.$$Q/$$@@Q@L3.may_fuse_arityLI@@@ @@GG@AQ8%%Q9%%@@Q@@AQ<$$Q=$$@@Q@\@@C@@@OwV@Ou@ภ$SomeV0MMV0MM@@Iఐ$lfunV0MMV0MM@ܰ@@!@@@@)@@V1MMV1MM@@4@@@ภ$NoneV1MM@C@@@7@@AEfV/MkM@@@@@FT@O3VVVVVVVV@@@@A@@@2@ఠ/declare_bindingV3MMV3MM@VA@@@@@@PT@O@@O@@H#Map#key@@@PT@O@Q@@@OT@O@@OT@O@@O"T@O@@OT@O@@OT@O3W W W W W W W W @k@@@@@࣠@#ctxAW3MMW 3MM@W2A@@53WWWWWWWW@DW'3MMW(;NO.@@@@@  @@RA@ఠ#varW83MMW93MM@WKA@@<3W7W6W6W7W7W7W7W7@&Q@@@@@@ఠ#defWG3MMWH3MM@WZA@@@@@WL3MMWM3MM@@@R@I@@O@@ @@ఐ֠.find_candidateWa4MNWb4MN@P@@@Qy@@@O@@OEߠ@@@O@@@O@@O3WmWlWlWmWmWmWmWm@8Av@;@<3l@-@.@@@@ఐ:#defW4MNW4MN@ @@y@@$@@E@@@O@@@O@Ġ$NoneW5NNW5NN"@D@@@@F @@@O@@@O3WWWWWWWW@.@@@ @F@@@O@@@O@@@ఐ#ctxW5NN&W5NN)@s@@@Ġ$SomeW6N*N.W6N*N2@APఠ$lfunW6N*N3W6N*N7@WA@@(@@@OZ@@@@@FA/@@@O@@@Ob@@FH6@@@O@@@Oi@@@@ఠ%arityW7N;NAW7N;NF@WA@@J@@@OY@O3WWWWWWWW@}/(@)@*@@@డVc$List&lengthW7N;NIW7N;NM@ X7N;NNX7N;NT@@J@@@J@@@@Oՠ@Sj@@@O@@OY@O@@@O@@OJ@@@O@@O1@@ఐf$lfunX+7N;NUX,7N;NY@=@@@@@O@OE@¶msX77N;NZX87N;N`@/@@JĠ4@@@OZ@OZ@OT@@E @@XU@A@XD7N;N= @@@ఠ&dps_idXO8NdNjXP8NdNp@XbA@@J@@@OY@O3XSXRXRXSXSXSXSXS@kyr@s@t@@@డT,create_local%IdentXh8NdNsXi8NdNx@ Xl8NdNyXm8NdN@@I@@@I@@@O@@OJ#@@@O@@O"@@డV!^X8NdNX8NdN@@&stringQ@@@@@@ @@@@@@@@@@@@@B^6^6B^6^\@@Bq@@@@@@@O@@O@@@@O@@O@@@O@@O@@O]@@డU[$name%IdentX8NdNX8NdN@ X8NdNX8NdN@@@J}@@@@@J\@@@@@@JWkRRJXkRg@@JI@@@@J@@@P@@P@@@P@@P@@ఐ#varX8NdNX8NdN@~@@@@0@@l@@@O@P\@P @@$_dpsY8NdNY8NdN@@Y8NdNY8NdN@@v@@@O[@P[@P@@Y8NdNY8NdN@@J@@@O@P[@O@@ @@@A@Y8NdNf @@@ఠ+direct_kindY'9NNY(9NN@Y:A@@,@@@PY@P3Y+Y*Y*Y+Y+Y+Y+Y+@@@@@@ఐw$lfunY<9NNY=9NN@N@@@@@P@P@$kindYH9NNYI9NN@K@@@A@YL9NN@@@ఠ$candYW:NNYX:NN@YjA@@@@@PY@P3Y\Y[Y[Y\Y\Y\Y\Y\@2@9@:@;@@@ະ3 @@@N@@@3@@A@A@3@@B@A@@A@ϡ%arityYt:NNYu:NNAఐ @"@@@@PY@P @&dps_idY:NNY:NNAఐA @]@@@@P%Y@P&3@'+direct_kindY:NNY:NNAఐ| @?@@@@P,Y@P-F@@@Y:NNY:NN@@OI@A@Y:NN@@ຐ3r@@@Nt@@@@Af@c+specializedY;NNY;NO@డV`#Map#add%IdentY;NOY;NO @ Y;NO Y;NO@@Y;NOY;NO@ @@@@@A@@A@!a@Ay@@A@!t @@@A@@A@@@A@@A@@A@@A@KvTaiKwTa@@+Stdlib__MapF@0&@@@@@@PH@@PG@@@@P7X@PX@PC@@PF@&@@@PE@@PD*@@@PB@@PA@@P@@@P?3ZZZZZZZZ@@@@@@@ఐ#varZ(;NOZ);NO@@@+@@ఐޠ$candZ5;NOZ6;NO@@@0X@P@@ఐ)#ctxZE;NOZF;NO @ @@Z-@+specializedZL;NO!ZM;NO,@ @@Y@P@@@P:@@ @@iQ@@@Pd?@@@Z[;NN4@@LA@5@@M@6@@N.@C7@@O@8@@Pr@@@AZa4MM:@@R@D;A@{T@Q8B@A@?@?>@UAఠ&choiceZq=O0O8Zr=O0O>@ZA@@@@@@}MT@QB@@Q@T@@@yeT@QF@@Q$tailG@@@x @@x ##Z@@@@@@T@T@}T@}T@}T@x@@x T@QH@@Q@@Q3ZZZZZZZZ@@@@@@࣠@#ctxAZ=O0O?Z=O0OB@ZA@@?3ZZZZZZZZ@U@P@@QC@M@@QGH@@QIU@QD@@QEU@Q9@[@\(traverse@_T@QJ@@QK@]T@QN@@QOT@@@tT@QP@@QQU@QL@@QMU@Q:@ZZ@@ZA2traverse_lfunction@{T@zzT@QR@@QS@\@@@y`T@QV@@QWa@@@|T@QX@@QYU@QT@@QUU@Q;@[;?[;Q@@[A,traverse_let@"T@yT@QZ@@Q[@@@@yT@Q^@@Q_@T@{0T@{1T@yT@Qb@@Qc@"T@Qf@Cנ@%T@x@dT@x@@x@@@xT@Qg@@QhU@Qd@@QeU@Q`@@QaU@Q\@@Q]U@Q<@[G[H@@[ZA/traverse_letrec@aT@Qi@@Qj@Q/V+rec_binding@@@z]T@z@@@zT@Qm@@Qn@|T@Qq@Sߠ@@@x@@@xT@Qr@@QsU@Qo@@QpU@Qk@@QlU@Q=@[|CG[}CV@@[A4traverse_let_binding@T@Qt@@Qu@T@Qx@@Qy@{T@Q|@@Q}@rT@Q@@QhT@Q@@QU@Q~@@QU@Qz@@Q{U@Qv@@QwU@Q>@[IM[Ia@@[A7traverse_letrec_binding@T@Q@@Q@VT@Q@@QQHT@z@@@zT@Q@@QU@Q@@QU@Q?@[gk[g@@[A0make_dps_variant@T@Q@@Q@\T@Q@@Q@cT@Q@@Q@[)lfunction@@@QU@Q@@Q@V@|@Z@@@|V@|@@|V@|@@@|T@Q@@QU@Q@@QU@Q@@QU@Q@@QU@Q@@\^b\^r@@\A-traverse_list@T@Q@@Q@ϠV@@@@"T@Q@@QT>@@@tT@Q@@QU@Q@@QU@QA@\"\#@@\5A@@@@rq@@!tA\/=O0OC\0=O0OD@\BA@@3\.\-\-\.\.\.\.\.@|@@@@@@@@Aఠ&choiceɠ\B>OGOQ\C>OGOW@\UA@@@OGOX\y>OGO[@\ A@@23\w\v\v\w\w\w\w\w@F@A@@Q>@@Q@;@@Q8@@QX@Q@@QX@Q@@QX@Q@R@S,choice_apply@VT@Q@@Q$tailVW@Q@@Q@X,lambda_apply@@@m8W@Q@@QrW@wW@uW@uW@vW@uW@uSW@uW@tW@nW@nW@n1W@n4W@mW@Q@@RX@Q@@QX@Q@@QX@Q@\]]\]]@@\A0choice_makeblock@W@R@@R$tailW@R@@R@@@b@@@pSW@mȠ@@]@\@@@pYW@mɠ@]@W@@@p_W@m@@mW@R @@R @T@:T@X5T@mW@R @@R@U@@@oW@R@@RgW@pJW@R@@RX@R@@RX@R @@R X@R@@RX@R@@RX@Q@])hh]*hh@@]<A+choice_prim@T@R@@R$tailW@R@@R@U@@@tW@R@@R@%@9W@TN@OGO]^>OGOa@^'A@@3^^^^^^^^@@@@@@@^>OGO\@@!tA^&>OGOb^'>OGOc@^9A@@3^%^$^$^%^%^%^%^%@@@@@@@@@ఐ!t^8?OfOp^9?OfOq@@@@@3^7^6^6^7^7^7^7^7@@@@Ġ$Lvar^V@OwO~^W@OwO@W@^[@OwO^\@OwO@@W@@@R3^[^Z^Z^[^[^[^[^[@$@@@@@ @@@@@Ġ'Lmutvar^j@OwO^k@OwO@;'LmutvarW@W!t@@@ @AA@V@AY &&4&6Y&&4&J@@@Y @@^}@OwO^~@OwO@@@@@R"@@@@@'#@@'#@@.@@($@Ġ&Lconst^@OwO^@OwO@P@^@OwO^@OwO@@P@@@R6@@@ @@;7@@;7@@B@@<8@Ġ)Lfunction^@OwO^@OwO@@^@OwO^@OwO@@ @@@RJ@@@ @@OK@@OK@@V@@PL@Ġ%Lsend^@OwO^@OwO@;%LsendX>@Z )meth_kind@@@ ǠX@@@ ȠX@@@ ɠW3X@@@ @@@ ʠW1@@@ @ES@V@AYk=*A*CYl=*A*@@@Z%@@^@OwO^@OwO@@$@@@R@@@X@@@R@@ @X@@@R@@@%Y@@@R@@@R@@@WV@@@R@@@E@@@@@@@@@Ġ'Lassign_AOO_AOO@;'LassignX@X!t@@@ ŠY@@@ @BR@V@AY<*!*#Y<*!*@@@@Zc@@_AOO_AOO@@@@@R@@@Y1@@@R@@@" @@@@@@ @@@Ġ$Lfor_-AOO_.AOO@;$LforX@X!t@@@ YJ@@@ YN@@@  T).direction_flag@@@ àYX@@@ @EQ@V@AY;))Y;)* @@@Z@@_RAOO_SAOO@@"@@@R@@@Yj@@@R@@ @Yo@@@R@@@"@@@R@@@Yy@@@R @@@?@@ @@ @@@@ @Ġ&Lwhile_uAOO_vAOO@;&LwhileX@Y@@@ Y@@@ @BP@V@AZ:))Z:))@@@Z@@_AOO_AOO@@Y@@@R.@@@Y@@@R3@@@ @@84@@84@@_@OwO}_AOO@@;7@@@@ఠ!t_BOO_BOO@_7A@@T@ycT@yT@xT@xT@xT@xT@XT@XT@W8T@W;T@TT@TT@T\T@T_T@TT@T T@ST@ST@Sb3________@@@@ఐ(traverse_BOO_BOO@@@@@@Sg@@@Sf@@Se@@Sd@@ఐu#ctx_BOO_BOO@Ұ@@"@@ఐԠ!t_BOO_BOO@@@/@@&@@0@A@_BOO@@డ)1&lambda&Choice` CPP` CPP@ `CPP`CPP@@@` '@@@>@@>~`''@@@>@@@>@@>@( @(@@@@@@Sw@@Sv@@@Su@@@St@@Ss3`,`+`+`,`,`,`,`,@@@@@@@ఐ!t`>CPP`?CPP@ @@@@8@@W@m{W@muW@miW@YW@Y~W@Y"W@Y W@XW@XW@UW@UW@TW@SW@S,@b@@@Ġ%Lprim`hHPP`iHPP@Xߠఠ$primӠ`qHPP`rHPP@`A@@X@@@R3`s`r`r`s`s`s`s`s@<@@@ఠ(primargsԠ`HPP`HPP@`A@@XZ@@@R@@@R@ఠ#locՠ`HPP`HPP@`A@@X@@@R!@@@2`HPP@@?#@@?#@@@ఐt+choice_prim`IPP`IPP@x@@@v@@Ssq@@S@n@@S@g@@S@d@@S_@@S@@S@@S@@S@@S3````````@RK@L@MD=@>@?3,@-@.@@@@ఐW#ctx`IPP`IPP@@@@ఐǠ$tail`IPP`IPQ@@@!@@ఐu$prim`IPQ`IPQ@)@@W@tW@S1@@ఐv(primargs`IPQ`IPQ@8@@W@S@@@ఐs#locaIPQaIPQ@F@@W@tW@tW@tW@ST@@l @@U@Ġ&LapplyaMQQaMQQ@;&LapplyZ@m@@@ @AC@V@A[(&m&o[(&m&@@@\t @ఠ%apply֠a.MQQa/MQQ@aAA@@@@@R3a0a/a/a0a0a0a0a0@@@@@@@@@@@@@ఐ,choice_applya@NQQaANQQ@@@@@@S@@S@@@S@@S@@S@@S3aJaIaIaJaJaJaJaJ@' @!@"@@@@ఐ砐#ctxa\NQQa]NQQ@D@@@ఐW$tailaiNQQajNQQ@?@@@@ఐH%applyavNQQawNQQ@'@@W@m9W@mW@mW@mW@mW@mW@m W@lW@lW@lyW@ltW@lrW@lmW@lgW@laW@kW@kW@kW@kW@kW@kW@jW@jW@hW@hhW@S]@@m6@@N^@Ġ)LsequenceaRRRaRRR@4ఠ"l1נaRRRaRRR@aA@@[@@@R3aaaaaaaa@@@@ఠ"l2ؠaRRRaRRR@aA@@[@@@R@@@ aRRR@@|@@|@@@@ఠ"l1aSRRaSRR@a8A@@=]@S3aaaaaaaa@.'@(@) @@@@@ఐ"(traverseaSRRaSRR@&@@@$@@S@!@@S @@S@@S@@ఐ#ctxb SRRb SRR@@@&@@ఐW"l1bSRRbSRR@/@@T@R^@S6@@)@@>7@A@bSRR@@;$let+b'TRRb(TRR@@ p@@@?C@@?B@@ y@@?A k@@?@@@?? n@@@?>@@?=@@?<@ @ @W@tW@tW@tW@qW@qW@q!W@q4W@pW@pW@pW@pW@plW@pW@oW@oW@oW@nW@nW@mcW@YW@YW@YW@YW@YCW@YQW@YW@TW@TW@T]@S@@@S]@S@@S@@YW@T W@S@@S\W@T\@S@@S@@S  ]@S@@@S]@S@@S@@S]@Sఐu&choicebTRRbTRR@5@@@t@@S5o@@S@j@@Sg@@S@@S@@S3bbbbbbbb@@@@@@@ఐ^#ctxbTRRbTRR@@@@MఐΠ$tailbTRRbTRR@@@@@ఐ"l2bTRRbTRR@@@]@S,@@<@@-@bURS@@"l2bTRRbTRR@c9A@@`:@@@ภ)LsequencecURScURS@6Kఐ."l1cURScURS@J@@-3cc c ccccc@N v@@@@@ఐ%"l2cURScURS@ @@@@.@@@A/@@W@T 3c ccc c c c c @_@@@3@@@@Ġ+Lifthenelsec1VSS c2VSS+@;+Lifthenelse\@]G@@@ ]K@@@ ]O@@@ @CN@V@A]8)v)x]8)v)@@@^@ఠ"l1٠cMVSS-cNVSS/@c`A@@]b@@@R3cOcNcNcOcOcOcOcO@@@@ఠ"l2ڠc\VSS1c]VSS3@coA@@]q@@@R@ఠ"l3۠cjVSS5ckVSS7@c}A@@]@@@R@@@AcrVSS8@@@@@@@@ఠ"l1c}WS<SHc~WS<SJ@c:A@@]@T 3c}c|c|c}c}c}c}c}@I=6@7@8/(@)@*"@@@@@ఐ(traversecWS<SMcWS<SU@ð@@@@@T@@@T@@T@@T@@ఐ2#ctxcWS<SVcWS<SY@@@`(@@ఐg"l1cWS<SZcWS<S\@0@@^@T7@@(@@8@A@cWS<SD@@$let+cXS`ShcXS`Sl@@ 1 @@@T&]@T,@@T/@@W@T'@@T)W@TZ\@T(@@T*@@T- D ]@T @@@T]@T+@@T.@@T0]@TఐP+choice_paircXS`SxcXS`S@T@@@R@@T7OM@@T6@J@@T5>@@T4@@T3@@T23cccccccc@|@@@@@@ఐ#ctxd XS`Sd XS`S@@@@gఐ$taildXS`SdXS`S@@@@@@ఐ̠"l2d(XS`Sd)XS`S@@@rW@TJ/@@ఐˠ"l3d5XS`Sd6XS`S@@@{W@TK<@@d:XS`Sd;XS`S@@W@TLA@@Q@@B@}d@YSS@@ @ఠ"l2dMXS`SndNXS`Sp@d`;A@@T@@ఠ"l3dYXS`SrdZXS`St@dl7@8@91*@+@,$@@@@@ఐ I(traversee\TT*e\TT2@ M@@@ K@@Th@ H@@Tg G@@Tf@@Te@@ఐ#ctxe1\TT3e2\TT6@@@*@@ఐZ#defe>\TT7e?\TT:@/@@'^@Ts9@@(@@ d:@A@eE\TT @@a$let+eM]T>TFeN]T>TJ@&@  ]@T{@@@T}]@T@@T@@W@T~@@TW@T\@T@@T@@T Ϡ ]@Tw@@@Tv]@T@@T@@T]@Ttఐ 7&choiceey]T>TRez]T>TX@@@@ 6@@T  1@@T@ ,@@T )@@T@@T@@T3eeeeeeee@@@@@@@ఐ #ctxe]T>TYe]T>T\@}@@ N@ ఐ$taile]T>T^e]T>Tb@x@@ R@@ఐ$bodye]T>Tce]T>Tg@@@]@T,@@<@@ V-@ie^TkT@@$bodye]T>TKe]T>TO@e>A@@^:@@@ภ'Lmutlete^TkTse^TkTz@$ఐ "vke^TkT|e^TkT~@Ű@@a+@@@T]@T]@T3eeeeeeee@U'{@@@@@ఐ#vare^TkTe^TkT@ٰ@@A@@@T]@T]@T@ఐ#defe^TkTe^TkT@q@@ @ఐI$bodyf^TkTf^TkT@(@@+@@@R@@,@AS@@W@T3ffffffff@@@@W@@ @Ġ$Lletf_TTf_TT@Wiఠ"lkf _TTf!_TT@f3A@@Wq@@@R3f"f!f!f"f"f"f"f"@@@@ఠ"vkf/_TTf0_TT@fBA@@a@@@R@ఠ#varf=_TTf>_TT@fPA@@W@@@R@ఠ#deffK_TTfL_TT@f^ A@@``@@@R+@ఠ$bodyfY_TTfZ_TT@fl!A@@`n@@@R9@@@Jfa_TT@@ ;@@ ;@@@@@ఠ#ctxfp`TTfq`TT@f?A@@ dT@T3fqfpfpfqfqfqfqfq@?`Y@Z@[RK@L@ME>@?@@81@2@3+$@%@&@@@@ఠ(bindingsf`TTf`TT@f@A@@ \T@xT@U.T@U:T@T@@% @@@%@@@T%@ఐ ,traverse_letf`TTf`TT@ @@@ @@T@ @@T@ @@T@ @ @@T@@T@@T@@TC@@ఐ N#ctxf`TTf`TT@@@ |P@@ఐ#varf`TTf`TT@T@@ T@T^@@ఐ#deff`TTf`TT@a@@ T@yT@Tn@@A@@@w@`@@T^@Tw@A@f`TT@@ $let+faTTfaTT@@ d]@T@@@T]@T@@T@@W@T@@T\@T@@T@@T v]@T@@@T]@T@@T@@T]@Tఐ ޠ&choiceg aTUg!aTU @ @@@ @@T  @@T@ @@T @@T@@T@@T3g*g)g)g*g*g*g*g*@@@@@@@@@ఐΠ#ctxg>aTU g?aTU @@@@ ఐ 9$tailgKaTUgLaTU@ !@@ @@ఐ$bodygXaTUgYaTU@ڰ@@A]@U.@@>@@ /@ig_bUU=@@$bodyggaTTghaTU@gzAA@@^<@@@ఐn%lletsgtbUU$gubUU)@Ͱ@@@X@@@U@@U@b@@@U@@U@P'@X@@@U@a@@@U@@U @@@U @@U @a@@@U @@U @@U@@U@@U@@U3gggggggg@rB@9@:@@@@ఐ"lkgbUU*gbUU,@3@@Y@@@U5^@U7^@U6@@ఐ"vkgbUU-gbUU/@F@@c@@@U3^@U9^@U8+@@ఐL(bindingsgbUU0gbUU8@@@K8@@ఐ~$bodygbUU9@A@@D@@q@@E@A@@W@U?3gggggggg@@@@@@ t@Ġ'LletrecgcU>UDgcU>UK@;'Lletreca~@  @@@ @@@ b@@@ @BG@V@Ab,''b,''?@@@cV@ఠ(bindingshcU>UMhcU>UU@h#"A@@  @@@R@@@R3hhhhhhhh@ @@@ఠ$bodyh#cU>UWh$cU>U[@h6#A@@b8@@@R@@@7h+cU>U\@@ @@ @@@@@ఠ#ctxh:dU`Ulh;dU`Uo@hMBA@@ T@UA3h;h:h:h;h;h;h;h;@ 70@1@2%@@ @@@@ఠ(bindingshMdU`UqhNdU`Uy@h`CA@@ T@xT@UT@UT@UB@@ @@@@@@UE@ఐ /traverse_letrechhdU`U|hidU`U@ @@@ @@UK@ @@UJ@ @ @@UI@@UH@@UG9@@ఐ #ctxhdU`UhdU`U@ k@@ <F@@ఐ(bindingshdU`UhdU`U@O@@ ?T@zT@zJT@zT@UXZ@@3 @@@c@R@@UZ^@UUc@A@hdU`Uh@@$let+heUUheUU@@d]@Ub@@@Ud]@Uj@@Um@@pW@Ue@@UgqW@U\@Uf@@Uh@@Uk. ]@U^@@@U]]@Ui@@Ul@@Un]@U[ఐ &choiceheUUheUU@ V@@@ @@UuV @@Ut@ @@Us @@Ur@@Uq@@Up3hhhhhhhh@@@@@@@@@ఐ#ctxheUUheUU@@@@pఐ $tailieUUieUU@ ٰ@@ @@ఐ$bodyieUUieUU@ΰ@@]@U.@@>@@ /@kifUU@@$bodyieUUi eUU@i2DA@@`<@@@ภ'Lletreci)fUUi*fUU@5ఐ栐(bindingsi3fUUi4fUU@J@@3i1i0i0i1i1i1i1i1@P v@@@@@ఐ%$bodyiAfUUiBfUU@ @@@@.@@@A/@@W@U3iCiBiBiCiCiCiCiC@a@@@3@@  @Ġ'LswitchiTgUUiUgUU@;'Lswitchb@cj@@@ d-lambda_switch@@@ a@@@ @CI@V@Ac.'w'yc.'w'@@@d@ఠ"l1irgUUisgUU@i$A@@c@@@R3itisisititititit@ =@@@ఠ"swigUUigUU@i%A@@(@@@R@ఠ#locigUVigUV@i&A@@a@@@R@@@CigUV@@ <@@ <@@@@@ఠ*consts_lhs iiV V,iiV V6@iEA@@X&^@@@U]@U@@@U]@U3iiiiiiii@ }LE@F@G>7@8@91*@+@,@@@@ఠ*consts_rhs iiV V8iiV VB@iFA@@Y(c@@@U]@U@@@U]@U@@/@@@/@@@U%@డhM$List%splitiiV VEiiV VI@ iiV VJiiV VO@@X$@@@X$@L@/@@U@@@U@@U@X|V@@@U@Ye=@@@U@@U@@UV@@ఐ"swjiV VPjiV VR@_@@@@@U@Uj@)sw_constsj$iV VSj%iV V\@3)sw_consts@@@ b@@@@ ꠠ@dI@@@ @@ @@@ @@A3,sw_numconsts_.@@@ @@@@AdZ--dZ--@@e.@!3,sw_numblocks!_8@@@ @@B@Ad\.J.Nd\.J.`@@e0@3)sw_blocks+b@_J@@@ @dr@@@ @@ @@@ @@C)@Ad]..d]..@@e1@3-sw_failactionC ld@@@ @@@ @@D7@Ae ^..e ^..@@e2@@Ae[..e[..1@@e/@dW@@X@ؠ@@@U@@@U^@U^@U@@f@@@砠@@@U^@U@A@jiV V(p@@@@ఠ*blocks_lhs jjV`VljjV`Vv@jGA@@Y#S@@@U]@U@@@U]@U3jjjjjjjj@ @ @@@@@@@ఠ*blocks_rhs jjV`VxjjV`V@jHA@@Z"d@@@U]@U@@@U]@U@@,@@@,@@@U#@డiG$List%splitjjV`VjjV`V@ jjV`VjjV`V@@Y@@@Y@I@/@@U@@@U@@U@YvS@@@UȠ@Z_=@@@U@@U@@UT@@ఐ"swkjV`VkjV`V@Y@@@@@U@Uh@)sw_blockskjV`VkjV`V@ϰ@@YU@@f@@U@@@U^@U^@U}@@N@@@@u@@U^@U@A@k9jV`Vh@@@ఠ"l1 kDlVVkElVV@kWIA@@ ]@U3kDkCkCkDkDkDkDkD@@@@@@@@ఐ(traversekWlVVkXlVV@@@@@@U@@@U@@U@@U@@ఐ#ctxkllVVkmlVV@ T@@%&@@ఐ"l1kylVVkzlVV@@@ b^@U5@@(@@6@A@klVV@@$let+kmVVkmVV@ a@@@W@XW@VW@V@W@V@@V@ W@XW@WW@V@@V]@V@@@V]@V @@V@@ @@V  dW@W6\@V@@V @@V ! ]@U@@@U]@V @@V@@V]@Uఐf+choice_listkmVVkmVW@j@@@h@@V9ec@@V8@`@@V7X@@V6@@V5@@V43kkkkkkkk@@@@@@@ఐr#ctxkmVWkmVW@ ϰ@@@}ఐ ⠐$tailkmVWkmVW @ ʰ@@@@ఐ<*consts_rhslmVW lmVW@M@@W@uW@VI-@@=@@.@l tXrX@$$and+lnWWlnWW#@@{)@@@?K@@?J@)@@@?I@@?H@)Π@)@@?G@@@?F@@?E@@?D@)@)@W@V'W@V&@@@V+]@V-@@V1@ @@@V)]@V,@@V/@@@@V%@@@V$]@V.@@V0@@V2]@V"ఐ+choice_listl[nWW1l\nWW<@@@@@@VR@@VQ@@@VP@@VO@@VN@@VM@@ఐ#ctxltnWW=lunWW@@\@@-@ ఐo$taillnWWBlnWWF@W@@1@@ఐϠ*blocks_rhslnWWGlnWWQ@C@@W@Vb@@9@@@lmVV@$and+loWRWZloWRW^@@ @@ @@V\@Vg\@V@@@V]@V@@V @W@V@@@V]@V@@V%@@ @@V@@@V]@V@@V@@V!]@Vఐ-choice_optionloWRWoloWRW|@@@@@@Vn@@Vm@@@Vl@@Vk@@Vj@@Vi @@ఐx#ctxloWRW}loWRW@հ@@@ఐ蠐$tailloWRWloWRW@а@@#@@ఐ"swm oWRWm oWRW@P@@@@@V@V7@-sw_failactionmoWRWmoWRW@@@-W@wW@VA@@H@@$B@@@(@@ఠ*consts_rhsm-mVV@m?JA@@W@VW@VW@V@V]@@ఠ*blocks_rhsm?nWW$m@nWW.@mRKA@@@Vj@@A@@@@@Vq@@ఠ-sw_failactionmSoWRW_mToWRWl@mfLA@@@V~@@A@@@1@ @@V@@@V@@@@ఠ)sw_constsmoqWWmpqWW@mMA@@cH@@@@V^@V@W@XW@WW@VW@V@@V@@@V^@V3mmmmmmmm@ga@b@cVO@P@QC<@=@>@@@డl$List'combinemqWWmqWW@ mqWWmqWW@@@c!a@@@@B@@A@0!b@@@@@@@?L@@@@>@@@=@@<@@;@c`>}>}ca>}>@@c_A@0+@@@(Z@@@V@@V@S[@@@V@@Vk@j@e@@V@@@V@@V@@V^@@ఐN*consts_lhsmqWWmqWW@A@@O@@@V_@V_@Vs@@ఐܠ*consts_rhsn qWWn qWW@{@@@@m@@@A@nqWW@@@ఠ)sw_blocksnrWWnrWX@n,NA@@@@@@V^@VĠ@@@V@@@V^@V3n)n(n(n)n)n)n)n)@@@@@@డl$List'combinen>rWXn?rWX @ nBrWX nCrWX@@@@@'@@@V@@V@ɠ@@@V@@V@7@@@V@@@V@@V@@V2@@ఐǠ*blocks_lhsnjrWXnkrWX@ @@ŠN@@@V_@V_@VG@@ఐ@*blocks_rhsnrWXnrWX)@@@?T@@E@@dU@A@nrWW@@@ఠ"swnsX-X9nsX-X;@nOA@@8@@@W)^@V3nnnnnnnn@k~@@@@@Рbc@@@W^@W@)sw_constsnsX-XHnsX-XQAఐE @@@ @@@V@=W@WW@V@@V@@@V^@V-@@@@W(^@W&@|)sw_blocksnsX-XSnsX-X\Aఐ  @@@@@@@W@`@@W@@@W^@W Q@-sw_failactionnsX-X^nsX-XkAఐ @e@_@@ఐ~"swnsX-X@osX-XB@F@@@@@W1^@W.^@Wq@o sX-X>o sX-Xn@@yt@A@o sX-X5@@ภ'LswitchotXrXzotXrX@ఐڠ"l1otXrXotXrX@D@@3oooooooo@@@@@@ఐ"swo,tXrXo-tXrX@ @@@@@W9]@W=]@W<@ఐ#loco>tXrXo?tXrX@@@g@@@W:]@WA]@W@'@@5@@@iZ@@@W7+@@D@@@E@@ @AF@@@AG@@W@WB3oMoLoLoMoMoMoMoM@x@@@K@@ @L@@@M@@@Ġ-Lstringswitcho`uXXoauXX@;-Lstringswitchh@iv@@@ gՠ@&stringQ@@@ @i@@@ @@ @@@ i@@@ @@@ g@@@ @DJ@V@Aj!1( (j"2("(i@@@j@ఠ"l1ouXXouXX@o'A@@i@@@S 3oooooooo@`@@@ఠ%casesouXXouXX@o(A@@?@>@@@S @i@@@S @@S @@@S @ఠ$failouXXouXX@o)A@@Ġi@@@S@@@S.@ఠ#locouXXouXX@o*A@@h6@@@S<@@@youXX@@~>@@~>@@@@@ఠ)cases_lhsowXXowXX@oPA@@^h@@@Wd]@WM@@@W]]@WD3oooooooo@kd@e@f]V@W@XC<@=@>2+@,@-@@@@ఠ)cases_rhspwXXp wXX@pQA@@_kj$@@@We]@WO@@@W^]@WE @@0@@@0@@@WH'@డn$List%splitp+wXXp,wXX@ p/wXXp0wXY@@^g@@@^g@M@/@@WR@@@WQ@@WP@^W@@@WL@_=@@@WN@@WK@@WJX@@ఐ%casespYwXYpZwXY @^@@^@v@X@@Wa@@@W`^@Wf^@Wbs@@@@@@@g@@Wh^@W\|@A@ptwXX@@@ఠ"l1pyY%Y1pyY%Y3@pRA@@]@Wi3pp~p~ppppp@@@}@~@@@@ఐ(traversepyY%Y6pyY%Y>@ð@@@@@Wn@@@Wm@@Wl@@Wk@@ఐ2#ctxpyY%Y?pyY%YB@@@`&@@ఐ"l1pyY%YCpyY%YE@@@^@Wy5@@(@@6@A@pyY%Y-@@$let+pzYIYQpzYIYU@@1@O\@W@\@W@@W]@W@@@W]@W@@W@@@@WW@X \@W@@W@@WM ]@W}@@@W|]@W@@W@@W]@Wzఐ+choice_listpzYIYbpzYIYm@@@@@@W@@W@@@W@@W@@W@@W3qqqqqqqq@@@@@@@ఐ#ctxqzYIYnqzYIYq@@@@ఐ$tailq zYIYsq!zYIYw@@@@@ఐ%)cases_rhsq-zYIYxq.zYIY@@@.W@W,@@<@@-@qq4~ZZ0@O$and+q;{YYq<{YY@+@@@@W]@W@@W@U@@@W]@W@@W@ՠ@a@@W@@@W]@W@@W@@W]@Wఐ-choice_optionqh{YYqi{YY@@@@@@W@@W@@@W@@W@@W@@Wq@@ఐ #ctxq{YYq{YY@i@@:~@ఐ|$tailq{YYq{YY@d@@>@@ఐܠ$failq{YYq{YY@@@W@W@@9@@@qzYIYV@@-t@ఠ)cases_rhs qzYIY_@qSA@@@W@@ఠ$failq{YYq{YY@qTA@@@W@@A@@@@@W@@@@ఠ%casesq}YYq}YY@qUA@@b@o@@@X^@W砠@X@@W@@@W^@W3qqqqqqqq@>8@9@:3,@-@.@@@డp]$List'combineq}YYq}YY@ q}YYq}YY@@X@@@X)@@@W@@W@@@@W@@W@9@@@W@@@W@@W@@W4@@ఐ<)cases_lhsr$}YYr%}YY@@@P@@@W_@X_@WI@@ఐ)cases_rhsr9}YYr:}YZ@R@@V@@E@@fW@A@r>}YY@@ภ-LstringswitchrE~ZZ rF~ZZ@ఐР"l1rO~ZZrP~ZZ@I@@3rMrLrLrMrMrMrMrM@m@@@@@ఐ%casesr]~ZZr^~ZZ$@ @@@@@@X@@@X@@@X]@X]@X@ఐ$failry~ZZ&rz~ZZ*@@@*@ఐ#locr~ZZ,r~ZZ/@@@j@@@X]@X#]@X"<@@J[@@l@@@X @@U_@@@A`@@LW@X$3rrrrrrrr@@@@d@@@%e@@:@Ġ,LstaticraiserZ1Z7rZ1ZC@;,Lstaticraisel-@g@@@ kl@@@ @@@ @BK@V@AmM3(j(lmN3(j(@@@n@ఠ"idrZ1ZErZ1ZG@r+A@@@@@S3rrrrrrrr@@@@ఠ"lsrZ1ZIrZ1ZK@r,A@@'l@@@S@@@S@@@9rZ1ZL@@@@@@@@ఠ"lsrZPZ\rZPZ^@rVA@@T@tT@XPT@XTT@X%3rrrrrrrr@81@2@3*#@$@%@@@ఐ-traverse_listsZPZasZPZn@@@@@@X*@@@X)@@X(@@X'@@ఐ#ctxsZPZosZPZr@@@&@@ఐR"lss"ZPZss#ZPZu@.@@3@@&@@ 4@A@s'ZPZX@@డ<\&lambda&Choices5ZyZs6ZyZ@ s9ZyZs:ZyZ@@+@@@+@@@X<@@X;*@@@X:@@@X9@@X83sFsEsEsFsFsFsFsF@Zjc@d@e@@@@ภ,LstaticraisesWZyZsXZyZ@ఐ"idsaZyZsbZyZ@n@@@@@XO]@XS]@XR @ఐ"lsssZyZstZyZ@(@@+@@swZyZsxZyZ@@e@@@XG]@XN3@@J@@7W@XD6@[ @@#@Ġ(LtrywithsZZsZZ@;(Ltrywithm@m@@@ m!t@@@ m@@@ @CM@V@An75((n85()@@@n@ఠ"l1sZZsZZ@s-A@@m@@@S3ssssssss@v@@@ఠ"idsZZsZZ@s.A@@)@@@S@ఠ"l2sZZsZZ@s/A@@m@@@S@@@DsZZ@@u@@u@@@ $let+s[k[ss[k[w@@F@\@X`@\@Xa@@Xb]@X]@@@X_]@Xg@@Xj@@@@XdW@X\@Xc@@Xe@@Xhb ]@XY@@@XX]@Xf@@Xi@@Xk]@XVఐʠ&choicet [k[}t [k[@@@@@@X@@X@@@X@@X@@X@@X~3tttttttt@xq@r@sjc@d@e]V@W@X@@@@ఐ#ctxt,[k[t-[k[@@@@ภbѰt7[k[t8[k[@b@@@W@l[W@l\W@iW@X]@X(@@ఐ"l1tM[k[tN[k[@0@@6]@X7@@G@@8@|tT[[@!o$and+t[[[t\[[@K@ɠW@Xp@@@Xu]@Xw@@X{@ՠW@Xq@@@Xs]@Xv@@Xyܠ@@ @@Xo@@@Xn]@Xx@@Xz@@X|]@XlఐI&choicet[[t[[@ @@@H@@X C@@X@>@@X;@@X@@X@@X@@ఐ/#ctxt[[t[[@@@]@ఐ$tailt[[t[[@@@a@@ఐ"l2t[[t[[@@@]@X@@9@@e@t[k[x@@0@ఠ"l1 t[k[z@tWA@@~@X@@ఠ"l2t[[t[[@tXA@@@X@@  A@@@@@X@@@ภ(Ltrywitht[[t[[@dఐ("l1t[[t[[@(@)@*@@)3tttttttt@3' @!@"@@@ఐP"idu [[u [[@@@|@@@X]@X]@X@ఐ>"l2u[[u[[@@@=!@@0@@("@AI@@3uuuuuuuu@@@@Ġ,Lstaticcatchu,[[u-[[@;,Lstaticcatchn@oB@@@ @j(@@@ @m@n!t@@@ @p@@@ @@ @@@ @@ oe@@@ @CL@V@Ao4((o4((@@@p@ఠ"l1uc[[ud[[@uv0A@@ox@@@S(3ueududueueueueue@.@@@ఠ#idsur[[us[[@u1A@@@A@@@S*@@@?@@@S-@p@@@S.@@S,@@@S+@@S)%@ఠ"l2u[[u[[@u2A@@o@@@S/3@@@ru[[@@C5@@C5@@@"$let+u\j\ru\j\v@@@T\@X֠@W\@X@@X]@X@@@X]@X@@X@@@@XcW@Y:\@X@@X@@X0 ]@X@@@X]@X@@X@@X]@Xఐ&choiceu\j\|u\j\@X@@@@@XX@@X@@@X@@X@@X@@X3uuuuuuuu@@@y@z@{]V@W@X@@@@ఐ#ctxu\j\u\j\@@@@tఐ$tailv\j\v\j\@ݰ@@!@@ఐ"l1v\j\v\j\@)@@]@Y 0@@@@@1@uv\\@#6$and+v"\\v#\\@ @W@X@@@X]@X@@X@W@X@@@X]@X@@X@@ @@X@@@X]@X@@X@@X]@Xఐ&choicevR\\vS\\@а@@@@@Y @@Y@@@Y@@Y@@Y @@Y x@@ఐ#ctxvk\\vl\\@S@@$@ఐf$tailvx\\vy\\@N@@(@@ఐ"l2v\\v\\@@@n]@Y!@@9@@,@v\j\w@@2^"@ఠ"l1  v\j\y@vYA@@=@Y(@@ఠ"l2!v\\v\\@vZA@@F@Y)@@A@@@@@Y-@@@ภ,Lstaticcatchv\\v\\@ఐ("l1v\\v\\@(@)@*@@)3vvvvvvvv@3' @!@"@@@ఐ_#idsv\\v\\@@@@@@@Y>@@@@@YA@r?@@@YB@@Y@@@@Y?@@Y=]@YK]@YE,@ఐT"l2v\\v\\@3@@S7@@F@@78@AX@@3vvvvvvvv@@@@Ġ&Leventw \\w \\@;&Leventp@q@@@ ͠rd,lambda_event@@@ @BT@V@Aq>**q>**@@@ri@ఠ#lamw#\\w$\\@w63A@@q8@@@S33w%w$w$w%w%w%w%w%@@@@ఠ#levw2\\w3\\@wE4A@@$@@@S4@@@1w:\\@@@@@@@$V$let+wB\\wC\]@@]@YZ@@@Y\]@Yb@@Ye@@W@Y]@@Y_W@Y\@Y^@@Y`@@YcĠ ]@YV@@@YU]@Ya@@Yd@@Yf]@YSఐ,&choicewn\] wo\]@@@@+@@Ym&@@Yl@!@@Yk@@Yj@@Yi@@Yh3wxwwwwwxwxwxwxwx@CaZ@[@\SL@M@N@@@@ఐ#ctxw\]w\]@t@@E@ఐ$tailw\]w\]@o@@I@@ఐ#lamw\]w\]@(@@]@Y}.@@>@@M/@kw]"];@@#lam#w\]w\]@w[A@@`<@@@ภ&Leventw]"]*w]"]0@ఐ#lamw]"]2w]"]5@s@@@@t3wwwwwwww@Q!@@@ఐ#levw]"]7w]"]:@X@@@@@Y]@Y]@Y@@#5@@@A6@@3wwwwwwww@f@@@Ġ'Lifusedw]<]Bw]<]I@;'Lifusedqx@qu!t@@@ Ϡr @@@ @BU@V@Ar?**r?**@@@sO@ఠ!xx ]<]Kx ]<]L@x5A@@@@@S8@ఠ#lamx]<]Nx]<]Q@x*6A@@r,@@@S9@@@1x]<]R@@@@@@@%;$let+x']V]^x(]V]b@@]@Y@@@Y]@Y@@Y@@W@Y@@YW@Y\@Y@@Y@@Y ]@Y@@@Y]@Y@@Y@@Y]@Yఐ&choicexS]V]ixT]V]o@Ѱ@@@@@Y @@Y@@@Y@@Y@@Y@@Y3x]x\x\x]x]x]x]x]@(`Y@Z@[SL@M@N@@@@ఐ#ctxxq]V]pxr]V]s@Y@@*@ఐl$tailx~]V]ux]V]y@T@@.@@ఐt#lamx]V]zx]V]}@'@@t]@Y.@@>@@2/@kx]]@@#lam$x]V]cx]V]f@x\A@@`<@@@ภ'Lifusedx]]x]]@ఐ!xx]]x]]@K@@@@@Y]@Y]@Y3xxxxxxxx@W'}@@@@@ఐ,#lamx]]x]]@ @@@@#5@@@A6@@i3xxxxxxxx@f@@@@@Ax?OfOj9@@l@T:A@@@@hII@@hH@~@@hG{@@hF@@hE@@hDW@h>^@@@x>OGOIJ@II@ @@F@@RXCA@@RW@>@@RV7@@RU@@RT@@RS3xxxxxxxx@@@@࣠@#ctxAx]]x]]@y `A@@^3xxxxxxxx@@@@@@]]Aay]]y ]]@yaA@@c3yyyyyyyy@o@@@@@@y]]@@%applyAy]]y]]@y-bA@@n3yyyyyyyy@x@@@@@@@@ &No_tmc\y-]]y.]]@#x*@@@Ay2]]@@yDcA@@@@@ @3y2y1y1y2y2y2y2y2@&@@@@@ఠ9explicit_tailcall_request͠yF]]yG]^@yYdA@@h6@@@h]@hd3yJyIyIyJyJyJyJyJ@("@@@ఐE%applyy\^ ^y]^ ^@%@@@+ap_tailcallyc^ ^yd^ ^)@3+ap_tailcall@@@ t2tailcall_attribute@@@ @@C3'ap_func s@@@ @@@@At R,,t R,,@@t(@3'ap_argsqs@@@ @@@ @@A@AtS,,tS,,@@t)@3&ap_loc"q@@@ @@B@At#T,,t$T,-@@t*@+3*ap_inlined+#5@@@ @@D&@At,V-5-9t-V-5-W@@t,@3.ap_specialised4#3@@@ @@E/@At5W--t6W--@@t-@@At9U--t:U--4@@t+@KC@@=@@@hg[@Ġ0Default_tailcally^/^9y^/^I@;0Default_tailcallN@@@ _@@@@AA@AtStT@@@u @@@  @@W@@@hlu@@Z@@@hmx@@@ภhfy^/^My^/^R@hf@@@@Ġ4Tailcall_expectationy^S^]y^S^q@;4Tailcall_expectation%@#@@@ ^@A@AA@Atzt{=@@@u4@Ġhy^S^ry^S^v@h@@@@@@@ht@@@@@@@@hu@@@@@hv@@@ภhy^S^zz^S^~@h@@@@Ġ4Tailcall_expectationz ^^z ^^@3Ġhz^^z^^@h@@@@9@@@h}@@@@@@@@h~@@@@@h@@@డx%raisez*^^z+^^@@#exnG@@@@@!a@@@&%raiseAAd$@@@d"^BBd#^Bg@@d!@@@@@@@@h@@h`@h@@h@@ภ&No_tmczV^^zW^^@;/yU@@@hc@@@5A@A-@@+@ @@0@@@h`@h@@;@@@@@Azf^ ^@@@A@zh]]@@ఐ]%applyzt^^zu^^@=@@3zrzqzqzrzrzrzrzr@)70@1@2@@@'ap_funcz~^^z^^@ @@t@@@h @Ġ$Lvarz^^z^^@tఠ!fΠz^^z^^@zeA@@t@@@h3zzzzzzzz@'@@@@@@@t@@@h@@t@@@h@@@@ఠ+specializedРz^^z^_@zgA@@'n@@@h_@h3zzzzzzzz@C(!@"@#@@@డwb#Map$find%Identz_ _z_ _@ z_ _ z_ _#@@z_ _$z_ _(@ @@#@@@B @@B@ !a@@@@@B@@B@@B@@B@ @ U@"@@@#@@@h@@h@!K_@h@@@h@@h@@h@@hI@@ఐu!f{ _ _){ _ _*@S@@$@@@h`@h[@@ఐ)#ctx{ _ _+{!_ _.@@@j@+specialized{'_ _/{(_ _:@!y @@'w@@@hu@@`@@0v@Ġ)Not_found{7_;_L{8_;_U@;)Not_found @@@ @@@e! A@A&_none_@@A@@e%I@@@@@zD@@@h@@@ ఐP$tail{V_Y_j{W_Y_n@8@@@డxa-prerr_warning(Location{f_t_{g_t_@ {j_t_{k_t_@@@(Location!t@@@@@@(Warnings!t@@@@@$unitF@@@@@@@@4parsing/location.mli4++4++?@@N@,'@@@$@@@i@@i@@@@i@@i@@@i@@i@@i@@డx//Scoped_location+to_location)Debuginfo{__{__@ {__{__@@{__{__@ @@)Debuginfo/Scoped_location!t@@@ :@@ 9(Location!t@@@ 8@@ 7@4lambda/debuginfo.mlibb@@S@)@@@@@@j@@j@@@j@@j1@@ఐߠ%apply{__{__@@@I@@&ap_loc{__{__@x @@ta@@@jJ@@|__|__@@@@@i@jd@jT@@ภ(Warnings|__|__@3Tmc_breaks_tailcall|__|_`@@;3Tmc_breaks_tailcall(Warnings!t@@@j @@@W[n@A2utils/warnings.mliySUySj@@@ V@@@@@@@ic@j}@@@@{@@@jb@jc@i@@|@_Y_g#@@ @డz%raise|J`` |K``%@ @@@ @@@j@@jb@j@@j@@ภ&No_tmc|_``&|```,@ @@@3@@@jb@j@@@@@)|i``-@@@@@|k_ _@@m@A@|m^^@@@ఠ$args|x`;`I|y`;`M@|hA@@tv@@@k,@@@k+_@j3||||||||@@@@@@@@ఠ$kind|aa|aa@|iA@@(@@@j`@j@@ఠ%arity|aa|aa@|jA@@)@@@j`@j+@@ @@@@ @@j2@@ఐ+specialized|aa|aa@?@@#m@@@j@jG@+direct_kind|aa|ab@#e@@7N@@ఐ/+specialized|ab|ab@Y@@#@@@j@ja@%arity|ab|ab@#@@@h@@*@@@V@G@@jo@A@|aa @@డ}6find_exact_application&Lambda}bb.}bb4@ } bb5} bbK@@@'@@@ -@@ ,%arityr @@@ +@@ *@uw8@@@ )@@@ (@@ ',wC@@@ &@@@ %@@@ $@@ #@@ "@@ !@wB0B0wBMB@@xe@61@@@'?@@@j@@j.,@@@j@@j@+wb@@@j@@@j@@j*ڠwl@@@j@@@j@@@j@@j@@j@@j3}[}Z}Z}[}[}[}[}[@@@@@@@@@ఐؠ$kind}obbL}pbbP@@@'u@@@ja@ja@j@dఐ۠%arity}bbR}bbW@!@@o@@@ja@ja@j-@@ఐ%apply}bbX}bb]@b@@ <@'ap_args}bb^}bbe@) @@w@@@j@@@ja@ja@jN@@@@4w@@@j@@@j@@@jZ@Ġ$None}bkby}bkb}@j@@@@Lw@@@k@@@k@@@k3}}}}}}}}@r@@@ @Xw@@@k@@@k@@@k @@@డ|O%raise}bkb}bkb@@@@@@@k@@kwb@k@@k!@@ภ&No_tmc}bkb}bkb@@@@@@@k&b@k*2@@@@3@Ġ$Some~bb~bb@gఠ$args~bb~bb@~+kA@@x0@@@k@@@k@@@ @@x;@@@k@@@k@@@k@ @xF@@@k@@@k@@@k@@@ఐ)$args~Abb~Bbb@(@)@*@@3~@~?~?~@~@~@~@~@@3@@@@@A~Hbb(@@w@T@@@A@~K`;`E @@@ఠ(tailcall~Vbb~Wbb@~ilA@@@kv@@@k?_@k9@@k:@@@kB_@k;@@k<_@k83~e~d~d~e~e~e~e~e@@@@@@࣠@$tailA~xbb~ybb@~mA@@3~w~v~v~w~w~w~w~w@+~bb~cc@@@@@  @@ఐ$tail~cc~cc@0@@@@13~~~~~~~~@"@@@ภ4Tailcall_expectation~cc~cc@ภmO~cc~cc@mN@@@@@@kD`@kH@@@@@@@@kC@ภ0Default_tailcall~cc4@@5@@`@kK'@~cc9@@)@C:A@a_@kMA@A@>@Р3G$&G@@@>GGG@@@>@@@ 3G @G@@@>@@>G@@>@@A @AG@G3GG~G}@@@>@@@>@@B@AG|@Gy3GvGu@@@>@@C@AGt@Gq3GnGm@@@>@@D@AGl@Gi@AG@G&Choice~dd~dd@#dps~dd~dd@@డ_$make#Dpsdddd!@ dd"dd&@@@BKC@@@4y@@@4x@@4wF!KA@@@4v@@@4u@@4t@K@@K=@@@B@@@kZ@@@kY@@kXF@@@kW@@@kV@@kU3*))*****@@@@@@@࣠$tailAAdd-Bdd1@TnA@@K@@@ku3CBBCCCCC@@@@@Jdd, @#dstAUdd3Vdd6@hoA@@KɠK@@@k@@@k3[ZZ[[[[[@2'K@@@kt@"@#@@@@gdd2@@ภ&Lapplyod:dHpd:dN@U'ap_func{d\ds|d\dz@ภ$Lvard\d}d\d@y ఐߠ+specializedd\dd\d@ @@&7@@@k@k3@8JL L @@@k@@@k@I@J@@@&dps_idd\dd\d@&:@@y.@@@ka@ka@k@@- @@y@@@ka@k@='ap_argsdddd@ఐy,add_dst_argsdddd@x@@@yy@@@k@@@k@@k@4y@@@k@@@k@@k{&@@@k@@k@@kL@@ఐ#dstdddd@V@@zz@@@k@@@kb@kb@kd@@ఐ$argsdddd@@@hz$@@@ka@kb@k@@@kb@kb@k@@R@@ @@@kb@k@x@@@ka@k@+ap_tailcall+dd,dd@ఐࠐ(tailcall6dd7dd@@@@mQ@@@k@@k@@@k@@k@@ఐ$tailMddNde@@@mh@@@kb@kb@k@@" @@@@@kb@k@Π*@@@ka@k@̠*@@@la@k@@ఐ\%applysd:dQtd:dV@<@@#@wd:dOxee@@#@@@ka@l@@@@z@@@k@dd'ee@@C}@@@kg_@l@@@l_@lH@@ @@͠)W@kO@@@kS_@kcQ@Ρ&directee'ee-@࣠@|lAĠ\Xee5ee7@\W@@@@If@@@l@@@@@ภ&Lapplye;eIe;eO@Qz@@@lb`@l`@OPz@@@li@@@lh`@le@Ly7@@@ln`@ll@u+ap_tailcalle;e]e;eh@ఐ(tailcalle;eke;es@@@@n@@@lR@@lQ@@@lP@@lO@@ఐ$taile;ete;ex@@@$[@@@@@@@lMa@lY@{*@@@lu`@ls@y*@@@lz`@lx@@ఐ %apply e;eR!e;eW@@@$s@$e;eP%e;ez@@$v@@@lF`@l}@@r@@{=@@@lE@0ee01e;e{@@@I@@@l8@@l7W@l.@@l6^@l@j)tmc_callsCeeDee@ภy@JeeKff#A| ຠ3@@@ I@@@3@@A@A@@A@#loc]ee^ee@ఐQ%applyheeiee@1@@$<@&ap_locoeepee@ @@@@@l^@lH@!(explicit}ee~ee@ఐ@9explicit_tailcall_requesteeef@@@@@@l^@l_@@@Eff"@@J9@@@l^@l^@lh@ภy*RAy)@SA@@@@l^@lu@@ee[@@JQ@@@l^@l}@ѡ1benefits_from_dpsf%f1f%fB@ภpgf%fEf%fI@pf@@@JV@@@l^@l@⡠9explicit_tailcall_requeste}ee}eAఐ @V@J]@@@l^@l@@@cdfKfV@@% @X@@%!n@@@%"S@m@@%#!@ఠ(_nontailϠfWf_fWfg@fA@@{@@@ht@@{@@@hw@@@డ_%raisefWfkfWfp@Ͱ@@@@@@l@@l!_@l@@l3@%@@ @@@@ภ&No_tmcfWfqfWfw@@@@@@@l_@l@@!@@%a@@@A^^ @@%c3@@@@ @@%e@Ġ&No_tmc$fxf%fxf@@@@@#@@@l@@@@ఠ0apply_no_bailout4ff5ff@GpA@@%@@@m _@l387788888@@@@@ఠ+ap_tailcallHggIgg@[qA@@@@@l`@l@ఐ E%apply\gg]gg@ %@@%3ZYYZZZZZ@ @@@+ap_tailcalldggegg@  @@@@@l @Ġ4Tailcall_expectationtggugg@Ġq|gg}gh@q@@@@@@@lE@@@@@ @@@lI@@ @@@lL@@ఐ $tailghgh @ s@@%W@ภ0Default_tailcallghgh @@@@Q`@ఠ%otherh!h-h!h2@rA@@ A@@@lO@@ D@@@lR@@@ఐ%otherh!h6h!h;@@@@@p3@ n@@@@@Agg@@t@A@gg @@ V|@@@m _@m @ T U|@@@m@@@m_@m @ Q{<@@@m_@m@ z+ap_tailcallhGh\hGhgAఐ @@@@ @@@m_@m3@ @@@ e,@@@m_@m@ c,@@@m_@m@@ఐ %apply hGhQ hGhV@ Ӱ@@&]@hGhOhGhi@@@P@@@A@ff@@РVT ^@mh@@@mg^@md@U&direct&hh'hh@࣠@~AĠ^߰3hh4hh@^@@@@K@@@mP343344444@  @@@@@@  @@ภ&LapplyDhhEhh@"*ఐ0apply_no_bailoutNhhOhh@@@&@@@mV`@mX`@mW@@ @@}j@@@mU#@]hh^hh@@@L@@@mH@@mG W@mT_@m=@@mF^@m[3@LL@@@mt@@@ms^@mo@L@@@mz^@mw@L@@@m^@m}@@డL&lambda&Choicehmhvhmh|@ hmh}hmh@@#@@@#@@@m'@@m&)#@@@m%@@@m$@@m#p@@ภ&Lapplyhmhhmh@"ఐ %applyhmhhmh@ @@'@@hmhhmh@@#@@@m2`@m7@@hmhuhmh@@)2!b^@m@@@m~^@mx^@mb@hmhshh@@' @@@'!@@@]]@@'#@]]@@'%3@ @@@ A@@'D@@m'A'?@@m@'<@@m'5@@m@@m@@mW@m @@@]]@''&&@&&@@'@@Rb''@@Ra@'@@R`@&@@R_@&@@R^&@@R]@@R\@@R[@@RZ@@RY3@'@@@࣠@#ctxAhhhh@'sA@@'93@'@@@@@'7A@ hh!hh@@'93@''F@@@@@@&hh@@A@ఠ#tag5hh6hh@HtA@@'B@@ఠ$flagAhiBhi@TuA@@'G#@@ఠ%shapeMhiNhi @`vA@@'K/@@RhhShi @@@'a@'\@'V@@m:@@  @@)blockargsAfhighi@ywA@@'X3eddeeeee@K='x@7@82'r@,@-''k@!@"@@@@  @@#locA{hi|hi@xA@@'`3zyyzzzzz@"'p@@@@@@@@@ఠ'choicesii&ii-@yA@@7I']@m@@@m]@m3@''}@@@@@డ$List#mapii0ii4@ ii5ii8@@7@@@@"]@m@@m$@@m@@m@7y @@@m@@m7x/@@@m@@m@@m.@@ఐ(&choiceii:ii@@(Q@@@(@@n*Q(@@n@(@@n(@@n@@n@@nI@@ఐ۠#ctxiiAiiD@ʰ@@(V@*fภsiiKiiP@s@@@(`@nc@@ii9iiQ@@@(@@n(@@nj@@ఐ)blockargs iiRii[@@@'w@@h@@}x@A@ii"@@డNI:find_nonambiguous_tmc_call&Choice"i_ii#i_io@ &i_ip'i_i@@@*;@@@?;@@@?:@@?9*=X;@@@?8@@?7@;@;@@@*"W@n#@@@n&@@@n%@@n$@@@n"@@n!3HGGHHHHH@@@@@@@ఐ̠'choicesZi_i[i_i@ @@(@@@n0^@n3^@n2@@D @@0#@@@n.@Ġ&Choiceviiwii@+No_tmc_call{ii|ii@@;=_I=@@@?0@=a=`@@@?+@A@@C@A=_@@=\ఠ$argsiiii@zA@@=q#(`@n8@@@n:3@M@@@@@& @@fY@@@n;@@j]@@@n< @@@డN&lambda&Choiceiiii@ iiii@@%@@@%@@@n@@n+$%@@@n@@@n@@n3@{=6@7@8@@@@ภ%Lprimiiii@~Jภ*Pmakeblockiiii@zРఐ#tagiiii@z@@("@ఐ$flagiiii@@@(-@ఐ%shapeiiii@@@(8@@$ii@@~u@@@n_@n?@ఐ~$argsiiii@G@@~#@@@n_@n_@nR@ఐ#loc!ii"ij@@@)]@@R%ij@@&@@@n_@nd@@{@@)e@Ġ&Choice8jj 9jj@)Ambiguous=jj>jj@@;=@ >>\@@@?2@AB@C@A=@;A>@@>@@@?->@>>@@=+=@@@?/@@@?.=@=@BA@O@B@@@.@@@oA=ঠ(explicithjjijj$A3>$)'@@nF @@@3>@@AA>@> A>$@>!ఠ   @{A@>.@@@nR3tssttttt@,@@@(subtermsjj&jj.@3>0A?@@nH3@@A3>A:@@@-A><@>9-A>(@>%ఠ2ambiguous_subtermsjj1jjC@|A@@>>+$!`@nU@@@n]@@@n\"@@@jjjjE@@^$4`@n@@@@n__@n^-@@@o @@qd@@@nd2@@uh@@@ne6@@@@ఠ+term_choicepppp@A@@,#@@@o`@n@@@o_@n3@}YV@X@WB;@<@=@@@3$let+pppp@$@,BS$q@@@o_@o_@n`@n@@@n`@n@@n@@@@n2_@n@@n@@n,[8@@@n`@n@@n@@n`@nడP/$list&Choicepp pp@  pp pp@@@B,{A@@@?*@@@?)@@?(,AA@@@?'@@@?&@@?%@B@B@@@B,$W@n@@@n@@@n@@n,B @@@n@@@n@@n354455555@r@@@@ఐ'choicesEppFpp@@@B9*@@@n`@n`@n@@I @@,u@@@n`@n@X pq@@$args `ppapp@sA@@*@@@ภ%Lprimj ppk pp@ภ*Pmakeblocks ppt pp@|gఐH#tag} pp~ pp@@@*3{zz{{{{{@)@ @!@@@ఐJ$flag pp pp@@@*@ఐI%shape pp pp@(@@*@@' pp@@@@@o`@o  @ఐK$args pp pp@(@@+@ఐ;#loc pp pp@@@*6@@M_@@7@A`@@@A@ppb@@Р&Choice q'q1 q'q7@#dps q'q8 q'q;@@డh$make#Dps q'q> q'qA@  q'qB q'qF@@ڰ@@@K\@@@o/@@@o.@@o-Ob@@@o,@@@o+@@o*3@-A:@;@<@@@@࣠$tailA@ q'qR q'qS@@T@@@oJ3@@@@@  q'qL@#dstA@ q'qY q'qZ@@TT@@@o[@@@oZ@@ q'qT @@@ఠ)arguments * q^qn+ q^qw@=A@@@@@ob@o^+@@ఠ$info >qzq?qzq@QA@@@Q|!tZ&lambda@@@oj@@@oic@o`@@oae@@@ooc@ob@@occ@o_S@࣠@!t Agqzqhqzq@zA@г$&Choicevqzqwqzq@+zqzq{qzq@@г./qzqqzq@@5@@@od3@Oqzqqq@@@  @@@E @@@of @@qzqqzq@@@M@@@@ຐ3@@@ X@@@@A@)tmc_callsqqqq@ఐO!tqqqq@li@@@ol@@@ok@S@T  @@.$u@@@o|d@o@@@od@o{3@Bk@@@)tmc_callsqqqq@ @@Ҡ@@@oy@@@oxd@o}@@@qzqP@г3subterm_informationqzqqzq@@@@@@ @U]A@c@od@A@a@ຠ3@@@ l@@@3@@A@A@@A(explicitr rr r%Aఐ @8@@@@ob@o3@@@@@@)argumentsr'r7r'r@@డ$List#map r'rC!r'rG@ $r'rH%r'rK@@;@@@@&@@@ob@o@@o@@@ob@ob@ob@o@@o@@o@;@@@o@@o;@@@o@@o@@oC@@ఐ$infoUr'rLVr'rP@M@@@@@@o@@@o@@o @@@o@@o^@@ఐ⠐2ambiguous_subtermspr'rQqr'rc@@@<1J@@@oc@oc@os@@\ @@E@@@oc@oz@@@qr rert@@W}@@@X}@A@ q^qj@@డ%raiserrrr@g@@@g@@@o@@o @@@ob@o@@o3@|u@v@w@@@@ภ%Errorrrrr@;@@@@B@@A@@డ>/Scoped_location+to_location)Debuginforrrr@ rrrr@@rrrr@ @ @@@@@@o@@o@@@o@@o=@@ఐo#locrrrr@N@@,J@@%@@@@@o@oc@oR@ภ?Ambiguous_constructor_argumentsrrrs@;6D@@@ t@8A@@A@A4@@1ఐߠ)arguments rs rs @i@@G@@@ob@ob@os@@ @@@@@ob@oy@@rrrs@@@@@ob@o@@@@@@@@$ q'qG%ss@@M @@@o<_@p@@@p_@p (@@X @@ n'W@p*W@nW@o9_@o#@@@o(_@o87@ u@R@@@p6@@p5^@p4@@p3^@p.@ zRR@@@p=@@@p<^@p8@ }R@@@pC^@p@@ R@@@pI^@pF@@ఐ+term_choicen q qo q q!@z@@/٠=^@pH@@@pG^@pA^@p)@| q q}ss%@@-Zu@@@-[@Ġ&Choices&s,s&s2@,Nonambiguouss&s3s&s?@@;Bc@/BBa@@@?,@AA@C@AB`@@B]ঠ&Choices&sBs&sH@*rev_befores&sIs&sS@A3AA@@@?6AA@@@?3@@@ 3A 0A@@@?4@@A@AA@A3AAA@@@?5@@B @AA@A@AA@Aఠ!@}A@AѠ(R`@nm@@@np@&choices&sUs&s[Aఠ@~A@0?(Q`@nr@@@nu@%afters&s]s&sbA+ఠ@A@A٠(t`@nw@@@nz@@@s&s@s&sd@@c(`@ni@@@n|_@n{@@@t @@ɠ@@@n}@@͠@@@n~@@@@ఠ&constrshstshsz@$A@@jd@@@pQ_@pL3@ZW@Y@XHE@G@F63@5@4@@@ Рw&Constr-shs}.shs@@ 3,++,,,,,@@@@@A3-,,-----@ @@@3/../////@@@3nj@@@(n@@@(@@@3n.B@@@(@@A@An@n3n .>@@@(@@B @An@n3nnWn@@@(@@@(@@C@An@n3nn`n@@@(@@@(@@D@An@n~3n{"nznynx@@@(@@E!@Anw@nt@An@ná#tagfssgssAఐ: @@.w3ihhiiiii@<@@@/$flagussvssAఐ= @@.@9%shapessssAఐ? @@.@C&beforessss@డ$List#revssss@ ssss@@@!a@@@@R@@Q @@@P@@O@OePe@@NM@@@@)M`@pp@@@pr@@pq@@@po@@pn_@@ఐ*rev_beforessss@@@2@@@p{a@p}a@p|t@@C @@o')i@@@pka@py{@%after ss ssAఐ  @@o))y@@@p`@p@#loc!st!stAఐ @p@.@@@ shs "t t@@@@@@A@shsp@@  డ"<>#tt8#tt:@B!@@@TРT@@@p@@@p_@p@@p@ @@pB\@@@p@@p@@p30//00000@*#@$@%@@@@ఐi&choiceD#tt'E#tt-@'@@1)`@p@@@p`@p@)tmc_callsS#tt.T#tt7@ @@/!@@ภb'^#tt;_#tt=@@@@<_@p.@@d#tt&e#tt>@@y|@@@p`@p6@l#tt@@4@@@p_@p=@Р #dps{2vv|2vv@డmH1delay_constructor#Dps2vv2vv@ 2vv2vv@@@XX@@@4@@4@TX@@@4@@@4@@4TX@@@4@@@4@@4@@4@X@X% @@@@@@p@@p@T/@@@p@@@p@@pT6@@@p@@@p@@p@@p3@@@@@ఐ &constr2vv2vv@@@D@@@p_@p_@p@@ఐ&choice2vv2vv@̰@@2R*p_@p@@@p_@p,@#dps2vv2vv@9@@Tt*{@@@p_@p_@p;@@z @@@W@p@@@p_@pD@A&Choice%tJtT%tJtZ@&direct%tJt[%tJta@@࣠@AĠhӰ'%tJti(%tJtk@h@@@@U@@@pe@@@@డ#not:&tot~;&tot@@հ@@@B@@@p@@p@@@@p@@p@@ఐx&choiceS&totT&tot@6@@2*a@q @@@qa@q)@1benefits_from_dpsb&totc&tot@@@B@@@qa@q a@q7@@3 @@z@@@q a@q=@డ%apply&Constr'tt'tt@ 'tt'tt@@k@@@l@@@q@@q@k@@@q@@qk@@@q@@q@@q c@@ఐ&constr'tt'tt@m@@l@@@q#a@q%a@q$w@@డV&direct&Choice'tt'tt@ 'tt'tt@@@3,R@@@? @@?R@@?@R@R @@@35+Ma@q(@@@q*@@q)@@q'@@ఐ&choice'tt'tt@ð@@3K@@@q1b@q3b@q2@@'tt'tt@@@@p@@a@q@డH0with_placeholder&Constr)tt)tt@ )tt)tu@@aڰ@@@mZ@@@qR@@qQ@@p֠p@@@qP@@@qO@@qNa@@@qM@@qL@@qKa@@@qJ@@qI@@qH@@ఐ&constr/)tu0)tu@@@m@@@qjc@qlc@qk@@9 @@@@qp@@@qh@@@qg@@qfb@@@qe@@qd@@qcb@@@qb@@qa@@࣠@'new_dstA])tu^)tu%@pA@@qq@@@q@@@q@@  @@ภ)Lsequencep*u)u7q*u)u@@aడW#dps&Choice*u)uA*u)uG@ *u)uH*u)uK@@@33@@@?@@@?@@?R[@@@?@@?R[[ @@@?@@@?@@?Z@@@? @@? @@? @@? @R@Rް*%@@@44@@@q@@@q@@qR[3@@@q@@qR[0[/@@@q@@@q@@q"@@@q@@q@@q@@q3@vqq@@@q@@@q@t@u@@@@ఐ&choice*u)uL*u)uR@@@4I,Y@@@qc@qc@q@Sภ}*u)uY*u)u^@}@@@[p@@@qc@q/@S ఐ'new_dst*u)ud*u)uk@9@@[z[y@@@q@@@qc@qc@qG@@@@'@@@q@qc@qO@ภ$Lvar +umu!+umu@ఐҠ'new_dst,+umu-+umu@b@@]q@@@qb@q@@@qb@qp@#var>+umu?+umu@m@@@@@qb@qb@q~@@) @@\@@@qb@q@@O+umu@@a@@@q@T)tu@@@rr@@@q}@@@q|@@q{c@@@qz@@qya@qa@q@@g@@-a@qw@k&tot{@@}@m%tJtdn+umu@@@X,@@@p@@p=W@p@@p^@q@)tmc_calls3ww 3ww@ఐ&choice4ww#4ww)@n@@4-^@q@@@q^@qa@)tmc_calls4ww*4ww3@Ȱ@@XHXG@@@q@@@q^@qq@ˡ1benefits_from_dps,uu,uu@ภ~M1vv1vv@~M@@@XP@@@q^@r@ܡ9explicit_tailcall_request5w5w?5w5wX@ఐ&choice6w[wg6w[wm@@@55-G^@r @@@r ^@r @9explicit_tailcall_request6w[wn6w[w@@@Xl@@@r^@r @@@$t@tH7ww@@2@{@@2@@@2@@@Ai_ic@@23@ @@@ @@2 S@ A@@3@@r33@@r@3 @@r@2@@r@2@@r2@@r@@r@@r@@r@@rW@r @@@hh @2ݠ2ݰ22@22@@2@@Rl22@@Rk@2@@Rj@2@@Ri@2@@Rh2@@Rg@@Rf@@Re@@Rd@@Rc3@3@@@࣠@#ctxA+9ww,9ww@>A@@23*))*****@3@@@@@22A299ww:9ww@LA@@2387788888@33 @@@@@@A9ww@@$primAK9wwL9ww@^A@@3 3JIIJJJJJ@3@@@@@@@@(primargsA\9ww]9ww@oA@@33[ZZ[[[[[@3@@@@@@@@#locAm9wwn9ww@A@@33lkklllll@3$@@@@@@@@ఐ7$prim:ww:ww@@@3=3}||}}}}}@3.@@@@@Ġ*Pmakeblock<xx<xx@ఠ#tag<xx <xx#@A@@@@@r3@@@@ఠ$flag<xx%<xx)@A@@@@@r@ఠ%shape<xx+<xx0@A@@@@@r@@@.<xx1@@3y@@3y@@@ఐ30choice_makeblock=x5x==x5xM@3@@@3@@t33@@t@3@@t@3@@t@3@@t3@@t@@t@@t@@t @@t 3@_NG@H@I@9@:@;3,@-@.@@@@ఐǠ#ctx=x5xN=x5xQ@@@3@4ఐŠ$tail=x5xS=x5xW@@@3!@@@ఐu#tag =x5xY=x5x\@-@@4_@t34@@ఐt$flag=x5x^=x5xb@:@@4 _@t4B@@ఐt%shape)=x5xd*=x5xi@G@@4&_@t5P@@/=x5xX0=x5xj@@4@W@t6U@@ఐ䠐(primargs==x5xk>=x5xs@̰@@3b@@ఐࠐ#locJ=x5xtK=x5xw@Ȱ@@3o@@@@3p@Ġ'PopaqueX@xxY@xx@;'Popaque@@@lo~@A@@@@@@  @@43]\\]]]]]@@@@@4@@@@ఠ"l1mAxxnAxx@A@@/W_@t;@ఐ#(primargs|Axx}Axx@ @@4/3zyyzzzzz@@@@ĠAiBxxBxxAIఠ"l1 Bxx@A @@/{W@t>@ĠAe A)@@ A@ @@@tC#@@@Bxx@@4T%@@4T%@@@ఐ"l1BxxBxy@@@@@>3@.#@@@@Cyy Cyy@@4i:@@4i:@@@డ*+invalid_argCyyCyy@@9<@@@@@!a@@@@{f{f:@@{B@@@@@@@tJ@@tI/b@tH@@tG`@@+choice_primCyyCyy*@@CyyCyy+@@'@@@tQb@tSb@tRt@@2 @@u@@@AAxx @@W@A@Axx @@?$let+Dy/y7Dy/y;@/@7m/y_@tb@@@td_@tj@@tm@@/W@te@@tg/W@t^@tf@@th@@tk7 _@t^@@@t]_@ti@@tl@@tn_@t[ఐ5預&choice+Dy/yA,Dy/yG@5@@@5@@tu75@@tt@5@@ts5@@tr@@tq@@tp354455555@@@@@@@ఐ#ctxGDy/yHHDy/yK@ @@5@7ఐ$tailTDy/yMUDy/yQ@@@5@@ఐ"l1aDy/yRbDy/yT@'@@*@@:@@6+@gfEyXyz@@"l1nDy/y<oDy/y>@A@@\8@@@ภ%LprimxEyXy`yEyXye@ภ'PopaqueEyXygEyXyn@)@@@@@@t_@t3@P$v@@@@@ภEyXyqEyXytARఐ1"l1 EyXys@ @@@ภ1A0@ A@0@@@t_@t"@@EyXyp@@0@@@t_@t*@ఐQ#locEyXyvEyXyy@9@@5g5@@GY@@6@AZ@@5W@t3@@@@^@@5h%@Ġ0Pbytes_to_stringHyyHyy@;0Pbytes_to_string@@@@o~@AJyz@;/Pfield_computed@@@Co~@AAA@@@h@@@  @@7@@7@@ @@7@Ġ)PsetfieldPKzzQKzz!@;)Psetfield@D@@@ @@@ @@@ @CEo~@ABB @@@i@@iKzz"jKzz#@@@@@s@@@@@@s@@ @@@@s@@@)@@74@@74@@@@75@Ġ2Psetfield_computedKzz&Kzz8@Ҡ@Kzz9Kzz:@@@@@s @@@@@@s@@@ @@7M@@7M@@ @@7N@Ġ+PfloatfieldLz;zALz;zL@;+Pfloatfield@@@@ @AGo~@A<D e g=D e {@@@k@@Lz;zMLz;zN@@@@@s/@@@@@7m0@@7m0@@@@7n1@Ġ.PsetfloatfieldLz;zQLz;z_@;.Psetfloatfield @@@@ @@@ @BHo~@A`E | ~aE | @@@l@@Lz;z`Lz;za@@@@@s"S@@@@@@s#X@@@  @@7Y@@7Y@@< @@7Z@Ġ&PccallMzbzhMzbzn@;&Pccall4@)Primitive+description@@@ @AJo~@AM N PM N q@@@Cs@@MzbzoMzbzp@@@@@s&|@@@@@7}@@7}@@`@@7~@Ġ&PraiseNzqzw Nzqz}@;&PraiseX@_*raise_kind@@@ @AKo~@AO  O  @@@dt@@Nzqz~Nzqz@@@@@s)@@@@@7@@7@@@@7@Ġ$Pnot)Ozz*Ozz@;$Pnoty@@@Jo~@AQ  Q  @@@w@@@  @@7@@7@@ @@7@Ġ'Pnegint<Pzz=Pzz@;'Pnegint@@@Ko~@AS  S  @@@x@@@  @@8@@8@@ @@8@Ġ'PaddintOPzzPPzz@;'Paddint@@@Lo~@AS  S  @@@y@@@  @@8@@8@@ @@8@Ġ'PsubintbPzzcPzz@;'Psubint@@@Mo~@AS  S  @@@z@@@  @@8'@@8'@@ @@8(@Ġ'PmulintuPzzvPzz@;'Pmulint@@@No~@AS  S  @@@{@@@  @@8:@@8:@@ @@8;@Ġ'PdivintPzzPzz@;'Pdivint@'is_safe@@@ @ALo~@A*T  +T  2@@@|@@PzzPzz@@@@@s1@@@@@8[@@8[@@@@8\@Ġ'PmodintPzzPzz@;'Pmodint@!@@@ @AMo~@AIT  3JT  G@@@}@@PzzPzz@@.@@@s4<@@@@@8z=@@8z=@@ @@8{>@Ġ'PandintQzzQzz@;'Pandint@@@Oo~@AdU H JeU H S@@@~@@@  @@8P@@8P@@3 @@8Q@Ġ&PorintQzzQzz@;&Porint+@@@Po~@AwU H TxU H \@@@1@@@  @@8c@@8c@@F @@8d@Ġ'PxorintQzzQzz@;'Pxorint>@@@Qo~@AU H ]U H f@@@D@@@@  @@8v@@8v@@Y @@8w@Ġ'PlslintRzzRzz@;'PlslintQ@@@Ro~@AV g iV g r@@@WA@@@  @@8@@8@@l @@8@Ġ'PlsrintRz{Rz{@;'Plsrintd@@@So~@AV g sV g |@@@jB@@@  @@8@@8@@ @@8@Ġ'Pasrint'Rz{ (Rz{@;'Pasrintw@@@To~@AV g }V g @@@}C@@@  @@8@@8@@ @@8@Ġ(Pintcomp:S{{;S{{ @;(Pintcomp@2integer_comparison@@@ @ANo~@AW  W  @@@D@@LS{{!MS{{"@@@@@s=@@@@@9 @@9 @@@@9@Ġ*Poffsetint[T{#{)\T{#{3@;*Poffsetint@O@@@ @APo~@AZ 7 9Z 7 L@@@H@@lT{#{4mT{#{5@@@@@s@@@@@@9-@@9-@@@@9.@Ġ*Poffsetref{T{#{8|T{#{B@;*Poffsetref@o@@@ @AQo~@A[ M O[ M b@@@I@@T{#{CT{#{D@@@@@sC@@@@@9M@@9M@@@@9N@Ġ+PintoffloatU{E{KU{E{V@;+Pintoffloat@@@Wo~@A7] | ~8] | @@@J@@@  @@9`#@@9`#@@ @@9a$@Ġ+PfloatofintU{E{YU{E{d@;+Pfloatofint@@@Xo~@AJ] | K] | @@@K@@@  @@9s6@@9s6@@ @@9t7@Ġ)PnegfloatV{e{kV{e{t@;)Pnegfloat@@@Yo~@A]^  ^^  @@@L@@@  @@9I@@9I@@, @@9J@Ġ)PabsfloatV{e{wV{e{@;)Pabsfloat$@@@Zo~@Ap^  q^  @@@*M@@@  @@9\@@9\@@? @@9]@Ġ)PaddfloatW{{W{{@;)Paddfloat7@@@[o~@A_  _  @@@=N@@@  @@9o@@9o@@R @@9p@Ġ)PsubfloatW{{W{{@;)PsubfloatJ@@@\o~@A_  _  @@@PO@@@  @@9@@9@@e @@9@Ġ)Pmulfloat W{{W{{@;)Pmulfloat]@@@]o~@A_  _  @@@cP@@@  @@9@@9@@x @@9@Ġ)Pdivfloat W{{!W{{@;)Pdivfloatp@@@^o~@A_  _  @@@vQ@@@  @@9@@9@@ @@9@Ġ*Pfloatcomp3X{{4X{{@;*Pfloatcomp@0float_comparison@@@ @ARo~@A`  `  @@@R@@EX{{FX{{@@@@@sN@@@@@:@@:@@@@:@Ġ-PstringlengthTY{{UY{{@;-Pstringlength@@@_o~@Ab # %b # 4@@@S@@@  @@:@@:@@ @@:@Ġ+PstringrefugY{{hY{{@;+Pstringrefu@@@`o~@Ab # 5b # B@@@T@@@  @@:,@@:,@@ @@:-@Ġ+PstringrefszY{{{Y{{@;+Pstringrefs@@@ao~@Ab # Db # Q@@@U@@@  @@:?@@:?@@ @@:@@Ġ,PbyteslengthZ{{Z{| @;,Pbyteslength@@@bo~@A)c R T*c R b@@@V@@@  @@:R@@:R@@ @@:S@Ġ*PbytesrefuZ{|Z{|@;*Pbytesrefu@@@co~@A<c R c=c R o@@@W@@@  @@:e(@@:e(@@  @@:f)@Ġ*PbytessetuZ{|Z{|%@;*Pbytessetu@@@do~@AOc R pPc R |@@@ X@@@  @@:x;@@:x;@@ @@:y<@Ġ*PbytesrefsZ{|(Z{|2@;*Pbytesrefs@@@eo~@Abc R }cc R @@@Y@@@  @@:N@@:N@@1 @@:O@Ġ*PbytessetsZ{|5Z{|?@;*Pbytessets)@@@fo~@Auc R vc R @@@/Z@@@  @@:a@@:a@@D @@:b@Ġ,Parraylength[|@|F[|@|R@;,Parraylength<@C*array_kind@@@ @AUo~@Ajj@@@H]@@[|@|S[|@|T@@@@@sY@@@@@:@@:@@e@@:@Ġ*Parrayrefu [|@|W[|@|a@;*Parrayrefu]@!@@@ @AVo~@Akk@@@g^@@[|@|b[|@|c@@.@@@s\@@@@@:@@:@@@@:@Ġ*Parraysetu,[|@|f-[|@|p@;*Parraysetu|@@@@@ @AWo~@All@@@_@@<[|@|q=[|@|r@@M@@@s_@@@@@:@@:@@@@:@Ġ*ParrayrefsK[|@|uL[|@|@;*Parrayrefs@_@@@ @AXo~@Amm7@@@`@@[[|@|\[|@|@@l@@@sb@@@@@;@@;@@@@;@Ġ*Parraysetsj[|@|k[|@|@;*Parraysets@~@@@ @AYo~@A n8: n8T@@@a@@z[|@|{[|@|@@@@@se@@@@@;;@@;;@@@@;<@Ġ&Pisint\||\||@;&Pisint@@@go~@A%p&p@@@b@@@  @@;N@@;N@@ @@;O@Ġ&Pisout\||\||@;&Pisout@@@ho~@A8r9r@@@c@@@  @@;a$@@;a$@@ @@;b%@Ġ'Pignore]||]||@;'Pignore@@@Bo~@AKyLy@@@b@@@  @@;t7@@;t7@@ @@;u8@Ġ-Pcompare_ints^||^||@;-Pcompare_ints@@@Uo~@A^Y  _Y  @@@E@@@  @@;J@@;J@@- @@;K@Ġ/Pcompare_floats^||^||@;/Pcompare_floats%@@@Vo~@AqY  rY  @@@+F@@@  @@;]@@;]@@@ @@;^@Ġ.Pcompare_bints^||^||@;.Pcompare_bints8@?-boxed_integer@@@ @AOo~@AY  Y  6@@@DG@@^||^||@@@@@sm}@@@@@;~@@;~@@a@@;@Ġ)Prunstack a}"}( a}"}1@;)PrunstackY@@@Do~@AH  H  @@@_o@@@  @@;@@;@@t @@;@Ġ(Pperforma}"}4a}"}<@;(Pperforml@@@Eo~@AI  I  @@@rp@@@  @@;@@;@@ @@;@Ġ'Presume/a}"}?0a}"}F@;'Presume@@@Fo~@AJ  J  (@@@q@@@  @@;@@;@@ @@;@Ġ*PreperformBa}"}ICa}"}S@;*Preperform@@@Go~@AK ) +K ) 7@@@r@@@  @@<@@<@@ @@<@Ġ(Pdls_getUa}"}VVa}"}^@;(Pdls_get@@@mo~@A " ,@@@@@@  @@<@@<@@ @@<@Ġ,Patomic_loadhd}}id}}@;,Patomic_load@@@ko~@A@@@@@@  @@<-@@<-@@ @@<.@Ġ*Pmakearray}g}}~g}}@;*Pmakearray@@@@ n,mutable_flag@@@ @BSo~@A#e  $e  @@@[@@g}}g}}@@@@@sw @@@@@@sx @@@! @@  @@>  @@@@> @Ġ(Pandbint[r=C\r=K@;(Pandbint@s@@@ @Aco~@A}}@@@q@@kr=Llr=M@@@@@s @@@@@>, @@>, @@@@>- @Ġ'Porbintzr=P{r=W@;'Porbint@@@@ @Ado~@A~~@@@r@@r=Xr=Y@@@@@s @@@@@>K @@>K @@@@>L @Ġ(Pxorbintr=\r=d@;(Pxorbint@@@@ @Aeo~@A9:@@@s@@r=er=f@@@@@s ,@@@@@>j -@@>j -@@@@>k .@Ġ(Plslbintr=ir=q@;(Plslbint@@@@ @Afo~@AXY@@@t@@r=rr=s@@@@@s K@@@@@> L@@> L@@/@@> M@Ġ(Plsrbintr=vr=~@;(Plsrbint'@@@@ @Ago~@Aw x;@@@1u@@r=r=@@@@@s j@@@@@> k@@> k@@N@@> l@Ġ(Pasrbintr=r=@;(PasrbintF@@@@ @Aho~@A<><Y@@@Pv@@r=r=@@@@@s @@@@@> @@> @@m@@> @Ġ)Pbintcompss@;)Pbintcompe@-@@@ @@@ @Bio~@AZ\Z@@@sw@@)s*s@@>@@@s @@@@@@s @@@ @@> @@> @@ @@> @Ġ.Pmakelazyblock=z >z !@;.Pmakelazyblock@.lazy_block_tag@@@ @ACo~@A[][@@@f@@Oz "Pz #@@@@@s @@@@@? @@? @@@@? @Ġ,Pbigarrayref^}DJ_}DV@;,Pbigarrayref@F@@@ W@@@ -bigarray_kind@@@ /bigarray_layout@@@ @Djo~@A@@@x@@}DW}DX@@@@@s @@@@@@s @@ @@@@s @@@@@@s @@@7@@?P @@?P @@@@?Q @Ġ,Pbigarrayset}D[}Dg@;,Pbigarrayset@FO@@@ @@@ @@@@ >@@@ @Dko~@ALMT@@@y@@}Dh}Di@@@@@s ?@@@@@@s D@@ @[@@@s I@@@Z@@@s N@@@3@@? O@@? O@@ 2@@? P@Ġ,Pbigarraydim~jp~j|@;,Pbigarraydim*@@@@ @Alo~@A{|@@@5z@@~j}~j~@@@@@s n@@@@@? o@@? o@@ R@@? p@Ġ/Pstring_load_16@;/Pstring_load_16J@F@@@ @Amo~@A@@@U{@@  @@@@@s @@@@@? @@? @@ r@@? @Ġ/Pstring_load_32@;/Pstring_load_32j@F@@@ @Ano~@A @@@u|@@+,@@@@@s @@@@@? @@? @@ @@? @Ġ/Pstring_load_64:;@;/Pstring_load_64@F@@@ @Aoo~@A   &@@@}@@KL@@@@@s @@@@@@  @@@  @@ @@@  @Ġ.Pbytes_load_16Z[@;.Pbytes_load_16@G @@@ !@Apo~@A')'A@@@~@@kl@@@@@s @@@@@@, @@@, @@ @@@- @Ġ.Pbytes_load_32z{@;.Pbytes_load_32@G+@@@ "@Aqo~@ABDB\@@@@@@@@@@s @@@@@@L @@@L @@ @@@M @Ġ.Pbytes_load_64@;.Pbytes_load_64@GK@@@ #@Aro~@A;]_<]w@@@@@@@@@@s .@@@@@@l /@@@l /@@ @@@m 0@Ġ-Pbytes_set_16@;-Pbytes_set_16 @Gk@@@ $@Aso~@A[xz\x@@@@@@@@@@s N@@@@@@ O@@@ O@@ 2@@@ P@Ġ-Pbytes_set_32!@;-Pbytes_set_32*@G@@@ %@Ato~@A{|@@@5@@"#@@@@@s n@@@@@@ o@@@ o@@ R@@@ p@Ġ-Pbytes_set_64&3@;-Pbytes_set_64J@G@@@ &@Auo~@A@@@U@@ 4 5@@@@@s @@@@@@ @@@ @@ r@@@ @Ġ2Pbigstring_load_166<6N@;2Pbigstring_load_16j@G@@@ '@Avo~@A242P@@@u@@+6O,6P@@@@@s @@@@@@ @@@ @@ @@@ @Ġ2Pbigstring_load_32:6S;6e@;2Pbigstring_load_32@G@@@ (@Awo~@AQSQo@@@@@K6fL6g@@@@@s @@@@@A  @@A  @@ @@A  @Ġ2Pbigstring_load_64Z6j[6|@;2Pbigstring_load_64@H @@@ )@Axo~@Aprp@@@@@k6}l6~@@@@@s @@@@@A, @@A, @@ @@A- @Ġ1Pbigstring_set_16z{@;1Pbigstring_set_16@H+@@@ *@Ayo~@A@@@@@@@@@@s@@@@@AL@@AL@@ @@AM@Ġ1Pbigstring_set_32@;1Pbigstring_set_32@HK@@@ +@Azo~@A;<@@@@@@@@@@s.@@@@@Al/@@Al/@@ @@Am0@Ġ1Pbigstring_set_64@;1Pbigstring_set_64 @Hk@@@ ,@A{o~@A[\@@@@@@@@@@sN@@@@@AO@@AO@@ 2@@AP@Ġ(Pctconst@;(Pctconst*@15compile_time_constant@@@ -@A|o~@A| }-@@@6@@@@@@@so@@@@@Ap@@Ap@@ S@@Aq@Ġ(Pbswap16@;(Pbswap16K@@@io~@A@B@L@@@Q@@@  @@A@@A@@ f @@A@Ġ'Pbbswap@;'Pbbswap^@&@@@ .@A}o~@AMOMi@@@h@@@@3@@@t@@@@@A@@A@@ @@A@Ġ/Pint_as_pointer-. @;/Pint_as_pointer}@@@jo~@A@@@@@@  @@A@@A@@  @@A@Ġ(Psequand@ A @;(Psequand@@@Ho~@AQ  Q  @@@u@@@  @@B@@B@@  @@B@Ġ'PsequorS T #@;'Psequor@@@Io~@AQ  Q  @@@v@@@  @@B@@B@@  @@B@Ġ%Ppollf$*g$/@;%Ppoll@@@no~@A@@@@@@  @@B+@@B+@@  @@B,@@@@ఠ(primargs {9E|9M@A@@,_@t@ఐC-traverse_list9P9]@C@@@C@@t@C@@tCy@@t@@t2@@ఐv#ctx9^9a@a@@Bl?@@ఐR(primargs9b9j@:@@B^L@@&@@CM@A@9A@@డh&lambda&Choicenvn|@ n}n@@?@@@?@@@t@@tE1?@@@t@@@t@@t3@S_X@Y@Z@@@@ภ%Lprimnn@Wఐ$primnn@@@B@ఐz(primargsnn@!@@y$@ఐ#locnn@~@@B/@@nn@@?@@@t_@t7@@N@@CKW@t:@_ @@B@@@A:ww @@B3        @@@@A@@B@@u&BB@@u%@B@@u$@B@@u#@B@@u"B@@u!@@u @@u@@u@@uW@u@@@*9ww&@BΠBΰBB@BB@@B@@RrBB@@Rq@B@@RpB@@Ro@@Rn@@Rm387788888@C@@@࣠@#ctx!AIJ@\A@@B3HGGHHHHH@C@@@@@BB"ABWX@jA@@B3VUUVVVVV@CB@@@@@@_@@%terms#Aij@|A@@B3hgghhhhh@B@@@@@@@@డi$list&Choice@ @@w@@@[xE=W@uC@@@uF@@@uE@@uDE[p @@@uB@@@uA@@u@3@0<C%@3@4@@@@డ$List#map@ @@S@@@@C@@@u^C[@uX@@u]@@u\@SCI@@@uZ@@uYS~ @@@uW@@uV@@uU1@@ఐD&choice@DW@@@D@@uxFWD@@uw@D@@uvD@@uu@@ut@@usL@@ఐ#ctx@@@CY@Flఐ$tail@@@Cf@@@@@D@@uD@@um@@ఐ%terms@w@@Cz@@@@\ DY@@@uR[@u\@uk@@ @@CW@uO@ A@@C@@uCC@@u@C@@uC@@u@@u@@uW@u@@@4@CCCjCi@ChCk@@C@@RxCC@@Rw@C@@RvC@@Ru@@Rt@@Rs3BAABBBBB@D@@@࣠@#ctx$AS T@fA@@C3RQQRRRRR@D@@@@@CC%ACab@tA@@C3`__`````@DC@@@@@@i@@3(A@ఠ"t1&xy@A@@CW@u3xwwxxxxx@$C@@@@@@ఠ"t2'@A@@CW@u@@@@@@ @@u@@ @@డj$pair&Choice"&",@ "-"1@@@@Gd@@@?@Gd@@@?@@?@@?G#@d@d@@?@@@?@@?@d@dǰ% @@@@G6DHW@u@@@uР@G>DLW@u@@@u@@u@@uGC@@ @@u@@@u@@u3@nxq@r@sib@c@d@@@@@ఐE&choice"3"9@E|@@@E@@uG|E@@u@E@@uE@@u@@u@@u$@@ఐǠ#ctx":"=@@@Dw1@GఐŠ$tail$"?%"C@@@D{>@@ఐ"t11"D2"F@G@@K@@7@@EL@@ఐE&choice@"HA"N@E@@@E@@vGE@@v@E@@vE@@v@@v@@uf@@ఐ #ctxY"OZ"R@@@Ds@GӐఐ$tailf"Tg"X@@@D@@ఐ렐"t2s"Yt"[@@@@@7@@F@@x"2y"\@@@E@E@@u[@v@@ @@DW@u@3 A@@D@@v0DD@@v/@D@@v.D@@v-@@v,@@v+W@v%=@@@@DƠDưDD@DD@@D@@R~DD@@R}@D@@R|D@@R{@@Rz@@Ry3@F>@@@࣠@#ctx)A]q]t@A@@D3@F<@@@@@DڠD*ADް]v]z@A@@D3@FKD@@@@@@]u@@!t+A]{]|@A@@D3@D@@@@@@@@డl&option&Choice@ @@@_H]_@@@?$@@@?#@@?"Hb__@@@?!@@@? @@?@_@_԰@@@_ϠHrF@@@vP@@@vO@@vNHw_ĠF@@@vL@@@vK@@vJ3@DPE1@G@H@@@@డ&Option#map./@ 23@@@@!a@v@@w*!b@v@@w)@@w(@E[@@@w'@@w&E_@@@w%@@w$@@w#@*option.mlioo@@.Stdlib__OptionI@,'@@@@Em@@wF[@w@@w@@w@EyEv@@@w@@w @@@w@@w@@wU@@ఐG:&choice|}@F@@@G9@@wHG4@@w@G/@@wG,@@w@@w@@wp@@ఐ䠐#ctx@ϰ@@E}@Iఐ⠐$tail@ʰ@@E@@@@@GP@@wGM@@w@@ఐ堐!t@@@E@@@@`Gb@@@v\[@w\@w@@ @@EW@vY@ A@@E@@wEE@@w@E@@wE@@w@@w@@wW@w@@@]_@@ఐG&choice@G_@@@G@@wI_@@@w@@w@G@@wIW@@@w@@@w@@w@@w@@w3@G~@@@@ఐIT#ctx@GҰ@@I@I@@ఐG預!t@G@@I@@8@@I@+?@@IG@IgA@@I@@x@I@@xI@@x@@xT@xIm@@@&=O0O0@I\I\IGIF@IEIH@@IY@@Q@IV@@QIU@@Q@@Q30//00000@I@@@࣠@#ctxBAAB@TA@@Im3@??@@@@@@I@@@@@@Ġ$LletPQ@ఠ"lkCYZ@lA@@@@@x,3[ZZ[[[[[@I(I@@ @@@ఠ"vkDjk@}A@@@@@x-@ఠ#varExy@A@@@@@x.@ఠ#defF@A@@@@@x/-@ఠ$bodyG@A@@@@@x0;@@@L@@I=@@@@@ఠ#ctxK@A@@HeX@xB3@Vb[@\@]RK@L@ME>@?@@81@2@3+$@%@&@@@@ఠ(bindingsL@A@@>7X@xC@@@@@@@@xF@ఐI̠,traverse_let".@Iа@@@I@@xN@I@@xM@I@@xL@I@I@@xK@@xJ@@xI@@xH=@@ఐ#ctx/2@@@J#J@@ఐ#var36@N@@>7Y@x`Y@@ఐ#def7:@\@@>8Y@xah@@A@@@q@Z@@xbY@x\q@A@#@@@ఠ$bodyM.>H/>L@AA@@EuX@xc3.--.....@@@wp@q@r@@@ఐJn(traverseA>OB>W@Jr@@@Jp@@xh@Jm@@xgJl@@xf@@xe@@ఐ#ctxV>XW>[@"@@&@@ఐϠ$bodyc>\d>`@@@I Y@xs5@@(@@J6@A@j>D@@ఐQn%lletstdjudo@OͰ@@@@@@x@@x@@@@x@@x@'@@@@x~@@@@x@@x}@@@x|@@x{@@@@xy@@xz@@xx@@xw@@xv@@xu3@nxq@r@s@@@@ఐT"lkdpdr@@@@@@xX@xX@x@@ఐW"vkdsdu@ @@@@@xX@xX@x+@@ఐ(bindingsdvd~@@@8@@ఐ$bodydd@B@@E@@r@@F%F@}@@F&@@@K7@Ġ'Lletrec@=ఠ(bindingsH@ A@@JJ@@@x6@@@x53@@@@ఠ$bodyI  @A@@!@@@x7@@@$@@K6@@@@@ఠ#ctxN#$@6A@@IX@x3$##$$$$$@70@1@2%@@ @@@@ఠ(bindingsO67@IA@@=X@x@@@@@@@@x@ఐJ/traverse_letrecKL@K@@@J@@x@J@@x@J젠@J@@x@@x@@x3@@ఐ(#ctxfg@@@K@@@ఐz(bindingsst@I@@=T@xO@@.@@@X@G@@xY@xX@A@@@ภ'Lletrec@>ఐ](bindings@\@]@^@@]3@p{t@u@vi@@@ఐKҠ(traverse@Kְ@@@K@@x@K@@xK@@x@@x@@ఐ#ctx@"@@&@@ఐ$body@@@JnX@x5@@(@@K6@@E @@@@@x;@Q@@K@ఠ#lamJ  @A@@L3@@@@@@డ+shallow_map&@@@@@@ @@ @@@ @@ @@ @@@@ @@ @@@ @@ @@ @?w?w?w?@@U[@ @@@@"@@@x@@x%@@@x@@x@@x@,@@@x@@x/@@@x@@x@@x3@LLE@F@G@@@@ఐL](traverse0(10@La@@@L_@@y @L\@@y L[@@y @@y @@ఐ#ctxE1F4@@@Lp'@@I'J5@@@Lp@@yLo@@y.@@ఐ~#lamY6Z9@8@@L};@@t@@L}<@@A^@@@A@@L@@y8@L@@y7L@@y6@@y5T@y1%@@@k@LLLlLk@LjLm@@L@@Q@L@@QLz@@Q@@Q3uttuuuuu@L@@@࣠@#ctxPA;R;U@A@@L3@L@@@@@@$lfunQA;V;Z@A@@L3@LL@@@@@@@@డ-map_lfunction]_]l@@@@@@ @@ @@@ @@ @@ @R@@@ @@ R@@@ @@ @@ @Y>>Z>?6@@Z@ @@@@@@@yO@@yN@@@yM@@yL@@yK@R8@@@yJ@@yIR;@@@yH@@yG@@yF3@GSL@J@K@@@@ఐM(traverse]n]v@M@@@M@@yk@M@@yjM@@yi@@yh@@ఐ#ctx]w]z@j@@M'@@]m]{@@@M.@@ywM-@@yv.@@ఐ$lfun]|]@8@@M;@@t@@MT@|T@y^?@A@@M3@@y@M.@@yM)@@y@@yT@y@@@*;;@M&M&LL@LL@@M#@@Q@M@@Q@M@@Q@M @M @@Q@@Q@@Q@@Q3>==>>>>>@M@@@࣠@)outer_ctxRAOP@bA@@MA3NMMNNNNN@M@@@@@@#varSA^_@qA@@MG3]\\]]]]]@MMS@@@@@@@@#defTAop@A@@MM3nmmnnnnn@M[@@@@@@@@@ఠ)inner_ctxU@A@@MtX@y3@"Me@@@@@ఐQ/declare_binding@M@@@Q@@@y@@y@@Q@@@y@@@@y@@y@@y@@y@@y&@@ఐl)outer_ctx@V@@M3@@@ఐn#var@V@@MD@@ఐi#def@M@@MP@@@@@Q@@@y@M@@yY@y^@@S @@M_@A@@@@ఠ(bindingsV@A@@MXT@y3@q|u@v@w@@@ఐM4traverse_let_binding @M@@@M@@y@M@@y@M}@@y@My@@yMx@@y@@y@@y@@y@@ఐՠ)outer_ctx! "@@@N,@@ఐ)inner_ctx./@6@@9@@ఐࠐ#var;<"@Ȱ@@N#F@@ఐܠ#defH#I&@@@N%S@@H@@MT@A@M@@@ఐנ)inner_ctxY,.Z,7@a@@3WVVWWWWW@eoh@i@j@@@@ఐu(bindingsh,9i,A@ @@t@@@@@ꠠ@{@@y@& @@{@ @@@& A@@Ni@@z@Nd@@z@N]@@z@NS@NR@@z@@z@@z@@zT@z 6@@@"@NENENN@NN@@NB@@Q@N?@@Q@N/@N.@@Q@@Q@@Q3@N@@@࣠@#ctxWACWCZ@A@@N\3@N@@@@@@(bindingsXAC[Cc@A@@Nd3@ONn@@@@@@@@@ఠ#ctxYflfo@A@@NW@z)3@"N|@@@@@డH$List)fold_leftrvrz@ r{r@@@@@@OW@z.@@z7@NW@z1@@z6@@z5@@z4@@z3@ @@z2@V @@@z0@@z/@@z-@@z,@@z+3@4@@@@࣠@#ctxZArr@)A@@'G@@@@]Aঠ"id'r(rA3"idN@@@ !t@@@ @@@ 3#def T@@@ @@A@AC**C*+@@!@@AB**B**@@ @ఠ [! @XA@@@@z^3FEEFFFFF@y>[@5@6@@@#defTrUrA!ఠ\@lA@T@@@za@@@`rar@@O[@z[@@@@ఐS/declare_bindingop@Oɰ@@@S@@@zh@@zm@@S@@@zk@@@@zl@@zj@@zi@@zg@@zf3@@HE@G@F52@4@3@@@@ఐ#ctx@M@@@@@ఐa"id@@@S@@@z[@z(@@ภ)Lfunction@Uఐg#def@8@@U)@@@z[@z[@zD@@ @@@@@z~[@zJ@@@@@S@@@z}@@@z|[@zX@@s @@OY@r@@@@@zP@@@zO@@zN@@zMX@zX@z@@ఐS#ctx@=@@O@@ఐQ(bindings @5@@O@@)@@9@A@ fh@@@ఠ(bindings^@+A@@Oe@@@zW@z3@Q\U@V@W@@@డ$List*concat_map34@ 78 @@@@!a@G@@O!b@D@@@@@@@@O@@@@@9@@@@@@@@@@[@-(@@@@P@@zOO@@@z@@z@@z@PP@@@z@@zVO@@@z@@z@@zU@@ఐO۠7traverse_letrec_binding $@O߰@@@O@@z@O@@zO@@z@@zl@@ఐ̠#ctx%(@v@@y@@ )@@@O@@zO@@z@@ఐ(bindings*2@ڰ@@PV@@~@@@A@@@@ఐ#ctx8:8=@@@3@@@@@@@ఐ(bindings8?8G@ @@P_T@z@@@@@@ @@z@( @@@ @@@1A@@P@@z@P@@z@P|@P{@@z@@z@@zT@z=@@@CC @PsPsPRPQ@PPPS@@Pp@@Q@Pm@@Q@Pj@@Q@Pf@@QPe@@Q@@Q@@Q@@Q3@Q^@@@࣠@)outer_ctx_AIbIk@#A@@P3@Q\@@@@@@)inner_ctx`AIl Iu@2A@@P3@QlP@@@@@@@@#varaA0Iv1Iy@CA@@P3/../////@P@@@@@@@@#defbAAIzBI}@TA@@P3@??@@@@@@P@@@@@@@@ఐVʠ.find_candidateUV@UD@@@m@@@{%@@{$ӠV@@@{#@@@{"@@{!3a``aaaaa@".P@%@&@@@@ఐ5#defst@ @@P@@"@@V@@@{.@@@{-@Ġ$None@@@@@V@@@{9@@@{83@,@@@ @V@@@{;@@@{:@@@ภA_@ఐ#var@g@@Q@@ఐQ砐(traverse@Q@@@Q@@{V@Q@@{UQ@@{T@@{S3@@ఐ )outer_ctx@@@QJ@@@ఐ#def@v@@QAM@@&@@RN@@B@@QT@{aQ@ภvJAv@KA@IQT@{J@@@{NZ@{fa@@U@@QVc@Ġ$Some@ఠ$lfunc @A@@Wk@@@{B@@@@@Wr@@@{D@@@{C@@Wy@@@{F@@@{E@@@@ఠ)functionsd()@;A@@QHT@|T@{T@{T@{g3.--.....@1*@+@,@@@ఐQw0make_dps_variant?@@Q{@@@Qy@@{q@Qu@@{p@Qr@@{o@Qm@@@{n@@{mQk@@{l@@{k@@{j@@{i"@@ఐ2#var_`@@@Q/@@ఐP)inner_ctxlm@8@@Q<@@ఐl)outer_ctxyz@V@@QI@@ఐ~$lfun @S@@Q@@@{\@{\@{]@@R @@Q^@A@ @@డ$List#map$*$.@ $/$2@@`v@@@@QT@{Z@{@@{R|T@{Z@{@@{@@{@`v@@@{@@{`u@@@{@@{@@{3@@@@@@@࣠@gA@ఠ#vare$9$<@A@@RZ@{3@@@@@ఠ$lfunf$>$B@A@@QT@{Z@{@@$8$C@@@@ @@{@@ @@@ఐ-#var$G$J@,@-@.@@-3@I8)"@#@$@@@@ภ)Lfunction$L$U@Xbఐ8$lfun!$V"$Z@@@7@@@@6@@@{@@"@@@O@ @@{$@0$31$[@@@@@{@@{[@{[@{Z@@ఐ)functionsD$\E$e@@@@@@@ST@{j@@@R@@@AL@@R@> A@@R@@|6@R@@|5@R@@|4@R@@|3R@@|2@@|1@@|0@@|/T@|'L@@@aII@RRRR@RR@@R@@Q@R@@QR@@Q@@Q3kjjkkkkk@S@@@࣠@#ctxhA|g}g@A@@R3{zz{{{{{@S@@@@@@KoAঠ"idggAgఠi@A@h@@@|C3@S&R@@@@@#defggAoఠj@A@Y @@@|F@@@gg@@R@@@@ఐ#def@@@@@Y$@@@|N@|L3@196@8@7& @@@$attr@Xް@@X@@@|P@|M@-tmc_candidate@X @@@@@|QV@|O@@ఠ)functionsk@A@@W@|R3@+@@@ఐS50make_dps_variant@S9@@@S7@@|\@S3@@|[@S0@@|Z@S+@@@|Y@@|XS)@@|W@@|V@@|U@@|T @@ఐ"id@T@@TT@|w/@@ఐ#ctx,-@@@S<@@ఐ#ctx9:@@@SI@@ఐ#defFG@@@Sh@@@|oX@|yX@|x]@@T @@Sg^@A@R @@డ$List#map`a@ de@@b6@@@@S@@|ST@|V@|~@@|@@|@b2S@@@|@@|b1@@@|}@@||@@|{3{zz{{{{{@@@@@@@࣠@QnA@ఠ"idl@A@@S3@@@@@ఠ#defm @A@@S @@ @@@S@S@@|@@ @@ຠ"idAఐ. @S@+@,@S3@F5(S@"@#@@@#defAఐ4 @@S@@@@@i@@@@S@@|t@@|W@|W@|J@@ఐ)functions$@n@@q@@@@T;T@|Z@@@@ภ,2,\Aຠ١"id,4,6Aఐz @D@@@@|V@|!@ࡠ#def,8,;@ఐU82traverse_lfunction%,>&,P@U<@@@U:@@|@U5@@|U0@@|@@|=@@ఐ#ctx:,Q;,T@@@TJ@@ఐ#defG,UH,X@@@UOW@|Y@@(@@UMZ@@@SN,Z@@TT@|^@ภW,[\A@]A@@@@|V@|l@@`,0e@@TT@|p@di@@sr@jA@@T@@|@T@@|T@@|@@|T@|@@@qggv@TTTxTw@TvTy@@T@@Q@T@@Q@T@@Q@T@@@Q@@QT@@Q@@Q@@Q@@Q3@U@@@࣠@#varpA^s^v@A@@T3@U@@@@@@)inner_ctxqA^w^@A@@T3@UT@@@@@@@@)outer_ctxrA^^@A@@T3@T@@@@@@@@$lfunsA^^@A@гTꠐT^^@@@@@}3@ ,U@#@$@@ @@^^@@@T@@@} @@@@@ఠ'specialt@A@@]@@@}LY@} 3@ :-@@@}@4@5@@@డ#Map$find%Ident@ @@@ @6A @@@Z@@@}(@@}'@W;7Y@}$@@@}&@@}%@@}#@@}"5@@ఐ#var89@@@UnB@@ఐ)inner_ctxGH@@@UuQ@+specializedNO@W @@^^@@@}K\@@F@@+]@A@W @@@ఠ*fun_choiceubc@uA@@VY@}a3baabbbbb@o}v@w@x@@@ఐW&choicest@V@@@W@@}f@V@@}eV@@}d@@}c@@ఐԠ)outer_ctx@@@U$@@ఐҠ$lfun @@@[@@@}u@}s8@$body@[x@@W$Z@}tA@Wภ^ @]@@@W&Z@}xN@@C@@W$O@A@@@ డ-!=9:@@!a@@@@@@/@@@@@@@&%equalBA@@@@yy@@Q@@@@zz@@@}@@@}Y@}@@}@ @@}~@@@}}@@}|@@}{3@@@@@@@ఐ*fun_choice'@@@@&Choice(.@)tmc_calls/8@@3B@@/!@@ภ; =@@@@;@=@<@@@డ|&direct&Choice  @   %@@%@@@Y -T@}@@@}@@}@@})@@ఐV*fun_choice & 0@°@@U6@@@@7@A@  @@డ*lfunction'484B@$kind]@@@ R@@ Q¶msE@c!t@@@ O@;@@@ P@@ N@@@ M@@ L&returnE@@@ K@@ J$body @@@ I@@ H$attr^ @@@ G@@ F#loco@@@ E@@ D^p@@@ C@@ B@@ A@@ @@@ ?@@ >@@ =@5566@@eK@RQ@@O^@@@~@@~MK@J@@@~@@@@~@@~@@@~@@~ G@@@~ @@~ EP@@@~ @@~ C^M@@@~@@~A@@@~@@~^@@@~@@~@@~@@~@@~@@}@@}3NMMNNNNN@@@@@@ఐk$kind`4Da4H@װ@@^f@@@~EZ@~GZ@~F@ఐn¶mst4Ju4P@@@@@@@~B@@@@~C@@~A@@@~@Z@~LZ@~H8@ఐq&return4R4X@ @@@@@~>Z@~QZ@~PL@ఐ0$body4Z4^@V@@/Y@ఐr$attr4`4d@*@@^@@@~:Z@~TZ@~Sm@ఐu#loc4f4i@=@@2@@@~8Z@~XZ@~W@@ @@@ @@Q@i @@@A@@@@ఠ#dps}msmv@A@@_H@@@~Y@~Y3@@@@@@@ఠ)dst_param~yy@ A@@+@@@~Z@~^@@@~_Z@~Z@ະ9#var@డ,create_local%Ident !@ $%@@@@@@@@~f@@~e@@@~d@@~cF@@#dst:;@@=>@@@@@~o[@~q[@~pZ@@' @@@@@~a[@~m`@t&offsetRS@డ,create_local%Identab@ ef@@@@@@@@~z@@~y@@@~x@@~w@@&offset{|@@~@@ @@@~[@~[@~@@' @@@#loc@ఐԠ$lfun@@@_@@@~@~@#loc@_q@@ @@@~@@@y@@@A@y}@@@ఠ#dst @A@@@@@~Z@~@@@~Z@~3@@@@@@ະt@@@~Z@~@&offset%@ภ&Offset(.@ภ$Lvar04@wఐ)dst_param5>@0@@*@@@~Z@~Z@~@@@~Z@~@@&offset ?E@6@@G@@/F@@5@@@~Z@~O@@5@@VZ@~R@B@@@~Z@~@@ఐ1)dst_param*+@a@@]@@@~Z@~@@@~Z@~Z@~q@;<H@@t@A@>@@డK2duplicate_function&LambdaLLPMLV@ PLWQLi@@@`@@@ @@ `@@@ @@ @===>@@X@@@@`@@@~@@~`@@@~@@~3hgghhhhh@@@@@@@డ*lfunction'|Lm}Lw@@@`@@@~@@~@@@@~@@@@~@@~@@@~@@~@@@~@@~@@@~@@~`@@@~@@~@@@~@@~a@@@~@@~@@~@@~@@~@@~@@~L@ภ'Curried@;'Curried`@@@ s@@@@B@@Aa!D!Yb!D!`@@@@@  @@`@@@&[@*g@ఐc.add_dst_params@@@@^]@@@6@@@5@@4@N@@@@0@P@@@1@@/@@@3@@2I@@@.@@-@@,@@ఐ)dst_param@G@@@@@N@@@M\@Q\@O@@ఐe$lfun*+@1@@a@@@Y@T@¶ms67@a.@@@g@@@#@@@@$@@"[@_\@G@@@K\@Z\@U@@RS@@@@@![@^\@F@oఐ$lfunhi@o@@a@@@e@c@&returntu!@aR@@@@@[@f[@d@డ#dps&Choice"/"5@ "6"9@@)@@@\\@@@s@@@r@@q{@@@p@@o{@@@n@@@m@@l)@@@k@@j@@i@@hI@@ఐ^*fun_choice"N"X@ʰ@@]V@{ภy"@"D@x@@@J@@@\@f@{ఐ##dst"J"M@p@@TS@@@@@@\@\@~@@"."Y@@@@@@\@@ఐ<$lfunZfZj@@@be@@@@@$attr ZkZo@b@@b@@@[@[@@ఐ^$lfun#p{$p@*@@b@@@@@#loc/p0p@a@@@@@[@[@@@ @@b@@@~@[@@@@@Y@@@Zz@@@[X@A@Emo@@@ఠ'dps_varPQ@cA@@d@@@Y@3TSSTTTTT@n|u@v@w@@@ఐu'specialef@@@_ @@@@@&dps_idqr@_@@@A@u@@ภq{|A;@ఐ#var@ް@@\3@3A:@;@<@@@@ఐ&direct@@@\X@@@"@@\T@@ภ*Ad@ఐb'dps_var @&@@]T@+@@ఐܠ#dps@f@@\X@9@@ @@\T@<@ภZ QAY@RA@,\Y@@@@X@K@@2[A@5\T@@@@X@T@@e@@(@@@Z@qj@@@k@@@l@@@m@@ @3n@@ @o@@ @UpA@@]%@@@]!@@@]@@@]@@@@@]@@@@@@@@T@f@@@^^@]]\\@\\@@]@@Q@\@@Q\@@Q@@Q3        @^k@@@࣠@#ctxA@0A@@]3@^i@@@@@@%termsA,-@?A@@]3+**+++++@^y]'@@@@@@@@డ$List#mapBC@ FG@@l@@@@]:@@^V@ @@@@@l]C@@@@@l @@@ @@ @@ 3[ZZ[[[[[@1=]P@4@5@@@@ఐ^(traverseop@^@@@^@@+@^@@*^@@)@@(@@ఐj#ctx@T@@]{'@@@@@^@@7^@@6.@@ఐo%terms@8@@];@@Z@@]T@ >@A@@]@@H@]@@G]@@F@@ET@A@@@@@@_@ఠ'rewrite   @A@@@@@@T@J@@K@@@T@L@@MT@I3@_@@@࣠@!tA  @A@@3@_$)  JZ@@@@@  @@@ఠ#ctx"@A@@c@@@UV@P3@(8@@ @@@ຐ`M+specialized'2@డ#Map%empty%Ident5:@ ;>@@?D@ @`3!a@A@@@A@`1@`.E@ @@`=f@@@YV@cV@a@@@`?@@@6%7F@@GB@A@9@@ఐ_p(traverseCJLDJT@_t@@@cZ@@@}@@|@b@@@{@@ze@@@y@@x@@w3RQQRRRRR@bpi@j@k@@@@ఐw#ctxdJUeJX@ @@c{@@@V@V@@@ఐ!txJY@@@#@@8@@$@C@@@A@T@@A@@@%StyleT\c\h@AAР$Misc%Style$Misc\k\o@ \p\u@@@3@_@@@@@@\\ @ @@Ġ_w{w}@^@@@@^@@@3@6A.@1@@@డ5register_error_of_exn(Location@ @@@@#exnG@@@@@&optionL?t%error@@@@@@@@@@?f@@@@@@?dy44?ey44@@?}_@+&@@@@#@@@@@ @@@@@@@@@@@@@@@3@Q@@@@@Ġ%Error@1mఠ#loc֠"#@5A@@,@@@3$##$$$$$@p@@@Ġ?Ambiguous_constructor_arguments12@18ঠ(explicit<= @2NĠݰCD@@@@@@@@ @)argumentsOP A2\ఠנ@gA@@@@@@@5@@@_`"@@@@@Y@=@@@6@@d@@@A@@@Rk#@@@@@F@@@@ఠ)print_msgڠy'5z'>@A@@@*Format_doc)formatter@@@Y@@@$unitF@@@Y@@@Y@3@|u@v@wHE@G@F@@@࣠@#ppfA'?'B@A@@(3@7'1Fy@@@@@  @@డ*Format_doc'fprintf*Format_docEQE[@ E\Ec@@@I@@@@@@&Stdlib&format!a@-]@@@ŠW@@@@@@@@@@@@@4utils/format_doc.mliQ@@fy@/*@@@p@@@@@@'@*Format_doc'printer&stringQ@@@@@@Z@jZ@@@@Z@@@@!@@@@@@Z@Z@@@ @ Z@ @@ @:5@@@@@Z@Z@@@@ Z@@@Z@@@Z@@@Z@@@Z@ @@ Z@@@Z@@@Z@@@@x@@@@@@@@c@@@@3]\\]]]]]@@@@@@@ఐˠ#ppfoEdpEg@ @@@@ภKL}hv~AภV%AlphaX ;%Alpha@@!b@@@#p@!x@@@#o!c@@@#n@@#m@@#l@ @@#k!a@@@#j@@#i!d@!e@!f@@@@#h@Ѡ/$@@@#q@AOAYAA''(.(j@@@o@ภ,Char_literal[;,Char_literal!a@!b@!c@!d@!e@!f@@@@#W@$charB@@@#X)%!@@@#Y@BLAYAA %% %%@@@Cl@z@@@@[@[@@ภb.Formatting_lit;.Formatting_lit7!a@ !b@ !c@ !d@ !e@ !f@ @@@#x@.formatting_lit@@@#y_($ @@@#z@BQAYAAV)()(W))@@@q@ภ3%Break5;%Break@@@"f@p@@@"`@@@"a@@@"b@C@GC@Ax|  y|  9@@@@@"@ @@@@@[@[@(@A@"@@@[@[@3@@@(@@@[@[@>@@$@Z@@@[@C@ภ|}1$this6@6@@@@[@[@W@ภEภeMdKQ@Q@f@@@[@[@r@A\@l@@@[@[@}@@g@r@@@[@[@@@n@@@@[@@ภ6Ơ{+constructor@@@@@[@[@@ภJڠภR@@@@@[@[@@A@@@@[@[@@@@@@@[@[@@@@@@@[@@ภ21+application@@@@@[@[@@ภ$2%1ภ,-@@@@@'[@+[@*@A@@@@([@-[@,@@@@@@)[@/[@.@@@8@@@[@&!@ภZ|[{#may@@`@@@<[@?[@>5@ภn|o#{ภvCw+B)/@/@D@@@U[@Y[@XP@A:@J@@@V[@[[@Z[@@E@P@@@W[@][@\f@@L@@@@L[@Tk@ภYŠ"be^@^@@@@j[@m[@l@ภ(mŠภ0usy@y@@@@[@[@@A@@@@[@[@@@@@@@[@[@@@@@@@z[@@ภ^/TMC-transformed@@@@@[@[@@ภrภz  ֠@@@@@[@[@@A@@@@[@[@@@@@@@[@[@@@@@@@[@@ภ8Z9Y"in@@>@@@[@[@@ภLZMYภT!U   @ @"@@@[@[@.@A@(@@@[@[@9@@#@.@@@[@[@D@@*@`@@@[@I@ภ7'several<@<@@@@[@[@]@ภKภkSjQW@W@l@@@ [@[@x@Ab@r@@@[@[@@@m@x@@@[@[@@@t@@@@[@ @ภ<̠)different@@@@@"[@%[@$@ภPภX@@@@@;[@?[@>@A@@@@<[@A[@@@@@@@@=[@C[@B@@@@@@2[@:@ภ87%ways.@@@@@P[@S[@R@ภ*8+7ภ23@@@@@i[@m[@l @A@@@@j[@o[@n@@@ @@@k[@q[@p"@@@>@@@`[@h'@ภ`a&Please@@f@@@~[@[@;@ภtu)ภ|I}1H/5@5@J@@@[@[@V@A@@P@@@[@[@a@@K@V@@@[@[@l@@R@@@@[@q@ภ_ˠ,disambiguated@d@@@@[@[@@ภ.sˠภ6Ơ{y@@@@@[@[@@A@@@@[@[@@@@@@@[@[@@@@@@@[@@ภd"by@@@@@[@[@@ภx ภܠ@@@@@[@[@@A@@@@[@[@@@@@@@[@[@@@@@@@[@@ภ>`?_&adding@@D@@@[@ [@ @ภR`S_ภZ'[& @@(@@@![@%[@$4@A@.@@@"[@'[@&?@@)@4@@@#[@)[@(J@@0@f@@@[@ O@ภ="anB@B@@@@6[@9[@8c@ภ QภqYpW]@]@r@@@O[@S[@R~@Ah@x@@@P[@U[@T@@s@~@@@Q[@W[@V@@z@@@@F[@N@ภBҠ(explicit@@@@@d[@g[@f@ภVภ^@@@@@}[@[@@A@@@@~[@[@@@@@@@[@[@@@@@@@t[@|@ภŠภ$F%E* attribute@@*@@@[@[@@ภ8F9Eภ@ A @@@@@[@[@@A@@@@[@[@%@@@@@@[@[@0@@@L@@@[@5@ภno#"to(@(@t@@@[@[@I@ภ‚ƒ7ภŠW‹?V=C@C@X@@@[@[@d@AN@^@@@[@[@o@@Y@d@@@[@[@z@@`@@@@[@@ภ(¸¹m٠#ther@r@@@@[@[@@ภ<̠٠ภDԠ@@@@@,[@0[@/@A@@@@-[@2[@1@@@@@@.[@4[@3@@@@@@#[@+@ภr$#$call@@@@@A[@D[@C@ภ$#ภ@@@@@Z[@^[@]@A@@@@[[@`[@_@@@@@@\[@b[@a@@@*@@@Q[@Y@ภLnMm$that@@R@@@o[@r[@q'@ภ`namภh5i4!@!@6@@@[@[@B@A,@<@@@[@[@M@@7@B@@@[@[@X@@>@t@@@[@]@ภÖ×K&shouldP@P@@@@[@[@q@ภêë_ภ"òóg~ek@k@@@@[@[@@Av@@@@[@[@@@@@@@[@[@@@@@@@[@@ภP"be@@@@@[@[@@ภdภlȠ@@@@@[@[@@A@@@@[@[@@@@@@@[@[@@@@@@@[@@ภ*L+K$made@@0@@@[@[@@ภ>L?KภFG@@@@@[@[@ @A @@@@[@[@+@@@ @@@[@[@6@@@R@@@ [@;@ภtu)/tail-recursive,.@.@z@@@'[@*[@)O@ภĈĉ=ภĐ]đE\CI@I@^@@@@[@D[@Cj@AT@d@@@A[@F[@Eu@@_@j@@@B[@H[@G@@f@@@@7[@?@ภ.ľĿsߠ"orx@x@@@@U[@X[@W@ภBҠߠภJڠ@@@@@n[@r[@q@A@@@@o[@t[@s@@@@@@p[@v[@u@@@@@@e[@m@ภxc ba@F@@@[@[@@ภ)(ภ#$@@@@@[@[@@A@@@@[@[@ @@@@@@[@[@ @@@/@@@[@ @ภQR ภY{Z z* attribute @ @_@@@[@[@ 4@ภm{n "zภuBv *A( .@ .@C@@@[@[@ O@A 9@I@@@[@[@ Z@@ D@O@@@[@[@ e@@ K@@@@[@ j@ภţŤ XĠ"on ]@ ]@@@@[@[@ ~@ภ'ŷŸ lĠภ/ſ tr x@ x@@@@[@![@  @A @@@@[@#[@" @@ @@@@[@%[@$ @@ @@@@[@ @ภ] %calls @ @@@@2[@5[@4 @ภq   ภy   ՠ @ @@@@K[@O[@N @A @@@@L[@Q[@P @@ @@@@M[@S[@R @@ @ @@@B[@J @ภ7Y8 X$that @ @=@@@`[@c[@b @ภK YL  XภS T    @ @ !@@@y[@}[@| -@A @ '@@@z[@[@~ 8@@ "@ -@@@{[@[@ C@@ )@ _@@@p[@x H@ภƁƂ 6&should ;@ ;@@@@[@[@ \@ภƕ Ɩ J ภ Ɲ jƞ R i P V@ V@ k@@@[@[@ w@A a@ q@@@[@[@ @@ l@ w@@@[@[@ @@ s@ @@@[@ @ภ;ˠ #not @ @@@@[@[@ @ภOߠ   ภW     @ @ @@@[@[@ @A @ @@@[@[@ @@ @ @@@[@[@ @@ @ @@@[@ @ภ7 6"be @ @@@@[@[@ @ภ) 7*  6ภ1 2    @ @ @@@[@[@ @A @ @@@[@ [@ @@ @ @@@[@ [@  !@@ @ =@@@[@ &@ภ_` ,transformed. @ @e@@@[@[@ :@ภs@t (?@ (@ bZ@Z@Z@Z@NZ@d\@  <@ /@Z@Z@Z@Z@MZ@c\@\@ \@#\@&\@@@@[@# p@@ V@.\@$\@3\@6\@9\@<\@@@@[@ @@ l@D\@ߠ:\@I\@L\@O\@R\@@@@[@ @@ @Z\@P\@ _\@àb\@Ġe\@Šh\@@@@[@ @@ @'p\@f\@u\@x\@{\@~\@@@@[@ @@ @=\@|\@\@\@\@\@@@@[@ @@ @S\@\@\@\@\@\@@@@[@ @@ @i\@e\@f\@g\@h\@i\@j@@@q[@ @@ @\@U\@V\@W\@X\@Y\@Z@@@a[@o @@ @\@7\@8\@9\@:\@;\@<@@@C[@_ 6@@ @\@'\@(\@)\@*\@+\@,@@@3[@A L@@ 2@ \@ \@ \@ \@ \@ \@@@@[@1 b@@ H@נ \@\@%\@(\@+\@.\@@@@[@ x@@ ^@6\@۠,\@ܠ;\@ݠ>\@ޠA\@ߠD\@@@@[@ @@ t@L\@ˠB\@̠Q\@͠T\@ΠW\@ϠZ\@@@@[@ @@ @bZ@PZ@^Z@h\@k\@n\@@@@[@ @@ @- \@m\@|\@\@\@\@@@@[@ @@ @D \@x\@y\@z\@{\@|\@}@@@[@ @@ @[ \@Z\@[\@\\@]\@^\@_@@@f[@ @@ @r +\@J\@K\@L\@M\@N\@O@@@V[@d @@ @ B\@,\@-\@.\@/\@0\@1@@@8[@T +@@ @ Y\@\@\@\@\@ \@!@@@([@6 B@@ (@ p\@\@\@ \@ \@\@@@@ [@& Y@@ ?@Π \@\@\@ \@#\@&\@@@@[@ p@@ V@ \@Р%\@Ѡ4\@Ҡ7\@Ӡ:\@Ԡ=\@@@@[@ @@ m@ \@<\@K\@ N\@àQ\@ĠT\@@@@[@ @@ @ \@S\@b\@e\@h\@k\@@@@[@ @@ @* \@j\@y\@|\@\@\@@@@[@ @@ @A \@t\@u\@v\@w\@x\@y@@@[@ @@ @X\@d\@e\@f\@g\@h\@i@@@p[@~ @@ @o(\@F\@G\@H\@I\@J\@K@@@R[@n@@ @?\@6\@7\@8\@9\@:\@;@@@B[@P(@@@V\@\@\@\@\@\@@@@$[@@?@@%@m\@\@ \@ \@  \@  \@ @@@[@"V@@<@ˠ\@ \@\@\@ \@#\@@@@[@m@@S@\@ڠ"\@۠1\@ܠ4\@ݠ7\@ޠ:\@@@@[@@@j@\@9\@H\@K\@N\@Q\@@@@[@@@@\@P\@_\@b\@e\@h\@@@@[@@@@'Z@aZ@oZ@w\@z\@}\@@@@[@@@@<\@i|\@j\@k\@l\@m\@n@@@u[@@@@S%\@Y\@Z\@[\@\\@]\@^@@@e[@s@@@j<\@;\@<\@=\@>\@?\@@@@@G[@c @@@S\@+\@,\@-\@.\@/\@0@@@7[@E#@@ @j\@ \@\@\@\@\@@@@[@5:@@ @\@\@\@\@\@\@@@@ [@Q@@7@Ơ\@ߠ\@\@\@\@\@@@@[@h@@N@ݠ\@Ϡ\@Р,\@Ѡ/\@Ҡ2\@Ӡ5\@@@@[@@@e@\@4\@C\@F\@I\@L\@@@@[@@@|@ \@K\@Z\@]\@`\@c\@@@@[@@@@"\@b\@q\@t\@w\@z\@@@@[@@@@9 \@sy\@t\@u\@v\@w\@x@@@[@@@@P"\@U\@V\@W\@X\@Y\@Z@@@a[@}@@@g9\@E\@F\@G\@H\@I\@J@@@Q[@_ @@@~P\@'\@(\@)\@*\@+\@,@@@3[@O @@@g\@\@\@\@\@\@@@@#[@17@@@~\@\@\@\@\@\@@@@[@!N@@4@à\@\@\@\@\@\@@@@[@e@@K@ڠ\@ˠ\@̠)\@͠,\@Π/\@Ϡ2\@@@@[@|@@b@\@1\@@\@C\@F\@I\@@@@[@@@y@\@H\@W\@Z\@]\@`\@@@@[@@@@\@_\@n\@q\@t\@w\@@@@[@@@@6\@ov\@p\@q\@r\@s\@t@@@{[@@@@M\@_\@`\@a\@b\@c\@d@@@k[@y@@@d6\@A\@B\@C\@D\@E\@F@@@M[@i@@@{M\@1\@2\@3\@4\@5\@6@@@=[@K@@@d\@\@\@\@\@\@@@@[@;4@@@{\@\@\@\@\@\@@@@[@K@@1@\@\@\@\@\@\@@@@[@ b@@H@נ\@ՠ\@֠&\@נ)\@ؠ,\@٠/\@@@@[@y@@_@\@.\@=\@@\@C\@F\@@@@[@@@v@\@E\@T\@W\@Z\@]\@@@@[@@@@\@\\@k\@n\@q\@t\@@@@[@@@@3\@ys\@z\@{\@|\@}\@~@@@[@@@@JZ@TZ@]Z@Z\@^\@_\@`@@@w[@@@@\O\@-@@@O[@n@ %a:@ this@ constructor@ application@ may@ be@ TMC-transformed@ in@ several@ different@ ways.@ Please@ disambiguate@ by@ adding@ an@ explicit@ %a attribute@ to@ the@ call@ that@ should@ be@ made@ tail-recursive,@ or@ a@ %a attribute@ on@ calls@ that@ should@ not@ be@ transformed.@@d@@@P[@%[@$@@@@i@@@[@L @@డ+inline_code%Styleyz@ }~@@xs@@@@@@@.utils/misc.mli.Q2Q4.Q2Q^@@$Misc@@@-@@0[@tail_mod_cons]ΗΘ@@ΚΛ@@[@<@@డ +inline_code%Styleά&έ+@ ΰ,α7@@3@@R@@+[@tailcall]μ9νD@@ο8E@@[@a@@డE+inline_code%StyleFTFY@ FZFe@@X@@w@@1[@tailcall false]FgFx@@Ff5@@[@@@&8@@@B9A@lY@@@A@=@@ఠ&submgs(@A@@S#msg@@@@@@Y@3@n@@@@@@ఠ#sub)@$A@@@~@@@Z@@@%@@@ Z@@@Z@"@࣠@$info+A12@DA@г4tmc_call_information>?@@#@@@3>==>>>>>@@7GH[@@@  @@KL@@@0 @@@@@ఠ#loc,YZ@lA@@S@@@\@3]\\]]]]]@ :H@@@@4@5@@@డ/Scoped_location+to_location)Debuginfoyz@ }~@@ςσ@ @S° @@@S@@@@@S@@@@@.@@ఐn$infoϜϝ@:@@NO@@@@B@#locϨϩ@NY@@@@@L@@6@@PM@A@ϰ@@డ̹#msg(LocationϾ*Ͽ2@ 36@@#locT^@@@;@@@:@@9@&Stdlib'format4!a@*Format_doc)formatter@@@6Th@@@7@@@8@@@5@@4@@3@@2@Tk e eTl e @@Tn@>9@@64T@@@@@@@@@3[@,@@@'@@@@@@@@@@@@@@@3@@@@@@Zภ$Someఐנ#loc081;@@@T@@@ \@\@@@@ϐ @@@"@@ภJ<Aภ"D# C=This call could be annotated.@@(@@@U\@X\@WB@ภ67@@zb[@@[@T]@D@@@\@>\@R@@@ \@?\@S @@@V\@ch@@<@]@" @@@A\@Qt@>L@L@@@@B\@g\@f@@SU@@Ǡ-&@@@\@=@@_@@@`@@F@^aA@Z@wh@A@e@డ$List#mapкл@ оп@@@@@@@@@[@@@@@@[@@@@@@@@@@@@@@@@@@3@@@@@@@ఐܠ#sub@ @@@@@@@@@@@@@@@A @@@8@@@@@7@@@@@'@@డ|$List'flatten@ @@@!a@@@@s@@@r@@q @@@p@@o@5@@R@$@@@.@@@Z@9Z@.Z@@@@@@@@@@@@@@t@@డ$List#mapfugu@ juku@@<@@@@H@@@]@@@{z@@@@@@]@@@@@@B@@@@@A@@@@@@@@@࣠@!t-Aўuџu@ѱA@@,3ѝќќѝѝѝѝѝ@@@@@@@ఐ!tѮuѯu@;@@@@<3ѭѬѬѭѭѭѭѭ@@@@)tmc_callsѸuѹu@I @@> @Ѽuѽu@@@P@@K@@^@!^@$@@a @@@X@@@@@W@@@@@1@@ఐ)arguments_k_t@D@@II@@@1@@@0\@4\@2I@@/@@̠͠@@@@@@[@6\@,V@@@@@@@Z@8[@_@@%@@`@@@@A@@@ภ$Some    @డ&errorf(Location  @    @@#loc]V@@@p@@@o@@n#subj$listKA@@@m@@@l@@@k@@j(footnote~V+delayed_msg@@@i@@@h@@g@'format4!a@ |)formatter@@@dV@@@e@@@f@@@c@@b@@a@@`@@_@@^@Vg11Vh12@@V[@[V@@SW @@@W@@@V@@UQO@@@T@@@S@@@R@@QLȠJ@@@P@@@O@@N@H@@O@@@uX@@@M@@@vX@@@X@@@@@@@X@X@@@X@H`@@@K]@@@L@@@M@@@J@@I+@@G@@F@@E@@D3@@@@@@ภҧiఐ#loc    @G@@Wt@@@Y@Y@@@@ @@@ @ภఐ&submgs  @/@@ʠ@@@~@@@}Y@Y@=@@ @Р@@@A@ʐภ$None@@L@@@@@@@@R@@ภhg* + Afภs%Theta ;%ThetaH@@!b@ @@#v!c@@@#u@@#t!a@@@#s  !d@ !e@ !f@ @@@#r@r# @@@#w@APAYAAi(k(kj()@@@p@ภFGN@N@X@wX@X@X@Š֠ҠX@Z@ˠZ@̠@@@Y@@@d@Z@X@@@@Y@@"%tw@w@@@@Y@Y@@@~}@@S .@@@tY@@@ఐB)print_msgӻ Ӽ (@@@X@@@  )@@ @@@@8 @@@?@@@@@@@@@@@@:@Ġ%Error *2 *7@J-ఠ#locؠ *9 *<@A@@@@@@Ġ?Ambiguous_constructor_arguments >M >l@Iঠ(explicit m m@K Ġ° m m@¯@@@@ѽ@@@@)arguments m mAKఠ٠@&A@Ѳѱ@@@@@@@@@ m~ m@@Y@@@Y@@@@6@@#@@@@@@Q* m@@Q@@@$@@@@ఠ)print_msg.8 9 @KA@@@@@@Y@@@@@@GY@@@Y@3IHHIIIII@sl@m@n@=@?@>@@@࣠@#ppf0A^ _ @qA@@ 3]\\]]]]]@/f g@@@@@  @@డ'fprintf*Format_docwx@ {|@@@@@@@@ @@ @@@@@B@P@AZ@zZ@ @@!@ Z@$@@%^Z@&@@'Z@"@@#Z@%@@@ @@@ @@@ @@%@@@@3ԭԬԬԭԭԭԭԭ@Q]s@T@U@@@@ఐd#ppfԿ@ @@@@ภ ԛ ԜXA ภԦPԧ OภԮ ԯz@@@@[@[@8@ภ1&Πภ9ɠ.|2@2@@@@[@[@S@A=@@@@[@[@^@@H@@@@[@[@i@@O@@@@[@n@ภg\$thisa@a@@@@[@[@@ภ{  pภxߠ|@|@@@@[@[@@A@@@@[@[@@@@@@@[@[@@@@@@@[@@ภAcBb+constructor@@G@@@[@[@@ภUcVbภ]*^)@@+@@@ [@ [@ @A@1@@@ [@[@@@@7@@@ [@[@@@@i@@@[@@ภՋՌ+application@@@@@[@![@ @ภ՟ՠภէtը sZ@@u@@@7[@;[@:1@A@{@@@8[@=[@<<@@&@@@@9[@?[@>G@@-@@@@.[@6L@ภEՠ:#may?@?@@@@L[@O[@N`@ภYNภaVZ@Z@@@@e[@i[@h{@Ae@@@@f[@k[@j@@p@@@@g[@m[@l@@w@@@@\[@d@ภA @"be@@%@@@z[@}[@|@ภ£3A4@ภ«;<@@ @@@[@[@@A@@@@[@[@@@@@@@[@[@@@@G@@@[@@ภi‹jŠ/TMC-transformed@@o@@@[@[@@ภ}~ภօRֆQ8@@S@@@[@[@@A@Y@@@[@[@@@@_@@@[@[@%@@ @@@@[@*@ภ#ֳִԠ"in@@¹@@@[@[@>@ภ7Ǡ,Ԡภ?Ϡ48@8@@@@[@[@Y@AC@@@@[@[@d@@N@@@@[@[@o@@U@@@@[@t@ภmb'severalg@g@@@@[@[@@ภÁvภÉ~@@@@@[@![@ @A@@@@[@#[@"@@@@@@[@%[@$@@@%@@@[@@ภ÷GiHh)different@@M@@@2[@5[@4@ภ[i\hภc0d/@@1@@@K[@O[@N@A@7@@@L[@Q[@P@@@=@@@M[@S[@R@@@o@@@B[@J@ภבóגò%ways.@@×@@@`[@c[@b@ภץצ ภ׭z׮y`@@{@@@y[@}[@|7@A!@@@@z[@[@~B@@,@@@@{[@[@M@@3@@@@p[@xR@ภK۠@$OnlyE@E@@@@[@[@f@ภ_Tภg\à`@`@@@@[@[@@Ak@@@@[@[@@@v@@@@[@[@@@}@@@@[@@ภĕ%G&F#one@@+@@@[@[@@ภĩ9G:FภıAB @@@@@[@[@@A@@@@[@[@@@@@@@[@[@@@@M@@@[@@ภođpĐ"of@@u@@@[@[@@ภ؃؄ภ؋X،W>@@Y@@@[@[@@A@_@@@[@ [@ @@ @e@@@[@ [@ +@@@@@@[@0@ภ)عغڠ#the#@#@Ŀ@@@[@[@D@ภ=͠2ڠภEՠ:>@>@@@@1[@5[@4_@AI@@@@2[@7[@6j@@T@@@@3[@9[@8u@@[@@@@([@0z@ภs%h$)argumentsm@m@ @@@F[@I[@H@ภŇ%|$ภŏ @@@@@_[@c[@b@A@@@@`[@e[@d@@@@@@a[@g[@f@@@+@@@V[@^@ภŽMoNn#may@@S@@@t[@w[@v@ภaobnภi6j5@@7@@@[@[@@A@=@@@[@[@@@@C@@@[@[@ @@@u@@@[@@ภٗŹ٘Ÿ&become@@ŝ@@@[@[@"@ภ٫٬ภ#ٳٴf@@@@@[@[@=@A'@@@@[@[@H@@2@@@@[@[@S@@9@@@@[@X@ภQ<F;aJ@@@@[@[@k@ภdYภlaȠe@e@@@@[@[@@Ap@@@@[@[@@@{@@@@[@[@@@@@@@[@@ภƚ*L+K#TMC@@0@@@[@[@@ภƮ>L?KภƶFG@@@@@[@[@@A@@@@[@[@@@@ @@@[@[@@@@R@@@[@@ภtƖuƕ%call,@@z@@@,[@/[@.@ภڈډภڐ]ڑ\C@@^@@@E[@I[@H@A@d@@@F[@K[@J%@@@j@@@G[@M[@L0@@@@@@<[@D5@ภ.ھڿ#ߠ#but(@(@@@@Z[@][@\I@ภBҠ7ߠภJڠ?C@C@@@@s[@w[@vd@AN@@@@t[@y[@xo@@Y@@@@u[@{[@zz@@`@@@@j[@r@ภx* m)'severalr@r@@@@[@[@@ภnj*)ภǔ$%@@@@@[@[@@A@@@@[@[@@@@@@@[@[@@@@0@@@[@@ภRtSs)arguments@@X@@@[@[@@ภftgsภn;o:!@@<@@@[@[@@A@B@@@[@[@@@@H@@@[@[@@@@z@@@[@@ภ ۜǾ۝ǽ'contain@@Ǣ@@@[@[@'@ภ ۰۱ภ(۸۹k!@!@@@@[@[@B@A,@@@@[@[@M@@7@@@@[@[@X@@>@@@@[@]@ภVK%callsP@P@@@@[@[@q@ภj_ภrgΠk@k@@@@+[@/[@.@Av@@@@,[@1[@0@@@@@@-[@3[@2@@@@@@"[@*@ภȠ0R1Q$that@@6@@@@[@C[@B@ภȴDREQภȼLM@@@@@Y[@][@\@A@ @@@Z[@_[@^@@@&@@@[[@a[@`@@@X@@@P[@X@ภzȜ{ț#are@@Ȁ@@@n[@q[@p@ภ܎܏ภܖcܗbI@@d@@@[@[@ @A @j@@@[@[@+@@@p@@@[@[@6@@@@@@~[@;@ภ4Ġ)*explicitly.@.@@@@[@[@O@ภHؠ=ภPEI@I@@@@[@[@j@AT@@@@[@[@u@@_@@@@[@[@@@f@@@@[@@ภ~0s/&markedx@x@@@@[@[@@ภɒ" 0# /ภɚ*+@@@@@[@[@@A@@@@[@[@@@@ @@@[@[@@@@ 6@@@[@@ภXzYy"as@@^@@@[@[@@ภl zm yภt Au @ '@@ B@@@[@[@@A@ H@@@[@[@ @@@ N@@@[@[@ @@@ @@@[@ @ภݢݣ à/tail-recursive. @ @ɨ@@@&[@)[@( -@ภ&ݶ ݷ  àภ.ݾ ݿ #  q '@ '@ @@@?[@C[@B H@A 2@ @@@@[@E[@D S@@ =@ @@@A[@G[@F ^@@ D@ @@@6[@> c@ภ\ Q &Please V@ V@@@@T[@W[@V w@ภp! e! ภx   m Ԡ  q@ q@ @@@m[@q[@p @A |@ @@@n[@s[@r @@ @ @@@o[@u[@t @@ @!@@@d[@l @ภʦ6X7 W#fix @ @<@@@[@[@ @ภʺJ!XK !WภR!S !! @ @! @@@[@[@ @A @!&@@@[@[@ @@ @!,@@@[@[@ @@ @!^@@@[@ @ภހʢށ ʡ#the @ @ʆ@@@[@[@ @ภޔ!ޕ !ภ ޜ!iޝ !h!O @ @!j@@@[@[@ &@A @!p@@@[@[@ 1@@ @!v@@@[@[@ <@@ "@!@@@[@ A@ภ:ʠ /(conflict 4@ 4@@@@[@[@ U@ภNޠ! C!ภV! K!! O@ O@!@@@[@[@ p@A Z@!@@@[@[@ {@@ e@!@@@[@[@ @@ l@!@@@[@ @ภ˄6 y5"by ~@ ~@@@@ [@[@ @ภ˘("6) "5ภˠ0!1 !! @ @!@@@%[@)[@( @A @"@@@&[@+[@* @@ @" @@@'[@-[@, @@ @"<@@@[@$ @ภ^ˀ_ )reviewing @ @d@@@:[@=[@< @ภr"s "ภz"G{ "F"- @ @"H@@@S[@W[@V @A @"N@@@T[@Y[@X @@ @"T@@@U[@[[@Z @@ @"@@@J[@R @ภߨߩ ɠ#and @ @ˮ@@@h[@k[@j 3@ภ,߼"߽ !"ɠภ4Ġ" )""w -@ -@"@@@[@[@ N@A 8@"@@@[@[@ Y@@ C@"@@@[@[@ d@@ J@"@@@x[@ i@ภb W&fixing \@ \@@@@[@[@ }@ภv# k#ภ~" s"ڠ" w@ w@"@@@[@[@ @A @"@@@[@[@ @@ @"@@@[@[@ @@ @#@@@[@ @ภ̬<^= ]#the @ @B@@@[@[@ @ภP#^Q #]ภX#%Y #$#  @ @#&@@@[@[@ @A @#,@@@[@[@ @@ @#2@@@[@[@ @@ @#d@@@[@ @ภ̨ ̧+conflicting @ @̌@@@[@[@ @ภ # #ภࢠ#o #n#U @ @#p@@@ [@[@ ,@A @#v@@@ [@[@ 7@@ !@#|@@@ [@[@ B@@ (@#@@@[@  G@ภ@Р 5,annotations. :@ :@@@@ [@#[@" [@ภT˱ I˰@ I@( {Z@Z@^Z@t\@%@ @JZ@Z@]Z@s\@\@\@\@\@@@@![@+ @@ o@N&\@ \@+\@.\@1\@4\@@@@[@ @@ @d<\@6\@A\@D\@G\@J\@@@@[@ @@ @zR\@ɠL\@ʠW\@ˠZ\@̠]\@͠`\@@@@[@ @@ @͐h\@b\@m\@p\@s\@v\@@@@[@ @@ @ͦ~\@x\@\@\@\@\@@@@[@ @@ @ͼ\@\@\@\@\@\@@@@[@ @@ @Ҡ\@m\@n\@o\@p\@q\@r@@@y[@ #@@ @\@]\@^\@_\@`\@a\@b@@@i[@w 9@@ @\@?\@@\@A\@B\@C\@D@@@K[@g O@@ 5@\@/\@0\@1\@2\@3\@4@@@;[@I e@@ K@*\@\@\@ \@ \@\@@@@[@9 {@@ a@@\@\@\@ \@#\@&\@@@@ [@ @@ w@V.\@(\@3\@6\@9\@<\@@@@[@  @@ @lD\@Ӡ>\@ԠI\@ՠL\@֠O\@נR\@@@@[@ @@ @΂Z\@T\@_\@b\@e\@h\@@@@[@ @@ @Θp\@j\@u\@x\@{\@~\@@@@[@ @@ @ή\@\@\@\@\@\@@@@[@ @@ @Ġ\@w\@x\@y\@z\@{\@|@@@[@@@ @ڠ\@Y\@Z\@[\@\\@]\@^@@@e[@+@@@\@I\@J\@K\@L\@M\@N@@@U[@cA@@'@\@+\@,\@-\@.\@/\@0@@@7[@SW@@=@\@\@\@\@\@\@ @@@'[@5m@@S@2 \@\@\@\@\@\@@@@ [@%@@i@H \@\@%\@(\@+\@.\@@@@[@@@@^6\@Ϡ0\@Р;\@Ѡ>\@ҠA\@ӠD\@@@@[@@@@tL\@F\@Q\@T\@ W\@àZ\@@@@[@@@@ϊb\@\\@g\@j\@m\@p\@@@@[@@@@Ϡx\@r\@}\@\@\@\@@@@[@@@@϶\@s\@t\@u\@v\@w\@x@@@[@@@@̠\@c\@d\@e\@f\@g\@h@@@o[@}@@@\@E\@F\@G\@H\@I\@J@@@Q[@m3@@@\@5\@6\@7\@8\@9\@:@@@A[@OI@@/@\@\@\@\@\@\@@@@#[@?_@@E@$\@\@\@ \@ \@  \@ @@@[@!u@@[@:\@ \@\@\@\@ \@@@@[@@@q@P(\@٠"\@ڠ-\@۠0\@ܠ3\@ݠ6\@@@@[@@@@f>\@8\@C\@F\@I\@L\@@@@[@@@@|T\@N\@Y\@\\@_\@b\@@@@[@@@@Вj\@d\@o\@r\@u\@x\@@@@[@@@@Ш\@}z\@~\@\@\@\@@@@[@@@@о\@_\@`\@a\@b\@c\@d@@@k[@@@@Ԡ\@O\@P\@Q\@R\@S\@T@@@[[@i%@@ @\@1\@2\@3\@4\@5\@6@@@=[@Y;@@!@\@!\@"\@#\@$\@%\@&@@@-[@;Q@@7@\@\@\@\@\@\@@@@[@+g@@M@,\@\@ \@ \@\@\@@@@[@ }@@c@B\@ՠ\@֠\@נ"\@ؠ%\@٠(\@@@@[@@@y@X0\@Š*\@Ơ5\@Ǡ8\@Ƞ;\@ɠ>\@@@@[@@@@nF\@@\@K\@N\@Q\@T\@@@@[@@@@ф\\@V\@a\@d\@g\@j\@@@@[@@@@њr\@yl\@zw\@{z\@|}\@}\@~@@@[@@@@Ѱ\@i\@j\@k\@l\@m\@n@@@u[@@@@Ơ\@K\@L\@M\@N\@O\@P@@@W[@s@@@ܠ\@;\@<\@=\@>\@?\@@@@@G[@U-@@@\@\@\@\@ \@!\@"@@@)[@EC@@)@\@ \@\@\@\@\@@@@[@'Y@@?@\@\@\@\@\@\@@@@[@o@@U@4 \@ߠ\@\@\@\@\@@@@[@@@k@J"\@\@ '\@à*\@Ġ-\@Š0\@@@@[@@@@`8\@2\@=\@@\@C\@F\@@@@[@@@@vN\@H\@S\@V\@Y\@\\@@@@[@@@@Ҍd\@^\@i\@l\@o\@r\@@@@[@@@@Ңz\@et\@f\@g\@h\@i\@j@@@q[@@@@Ҹ\@U\@V\@W\@X\@Y\@Z@@@a[@o @@@Π\@7\@8\@9\@:\@;\@<@@@C[@_@@@\@'\@(\@)\@*\@+\@,@@@3[@A5@@@\@ \@ \@ \@ \@ \@@@@[@1K@@1@\@\@\@\@\@\@@@@[@a@@G@&\@۠\@ܠ\@ݠ\@ޠ \@ߠ \@@@@[@w@@]@<\@ˠ\@̠\@͠\@Π\@Ϡ"\@@@@[@@@s@R*\@$\@/\@2\@5\@8\@@@@[@@@@h@\@:\@E\@H\@K\@N\@@@@[@@@@~V\@P\@[\@^\@a\@d\@@@@[@@@@Ӕl\@of\@pq\@qt\@rw\@sz\@t@@@{[@@@@Ӫ\@Q|\@R\@S\@T\@U\@V@@@][@y@@@\@A\@B\@C\@D\@E\@F@@@M[@[@@@֠\@#\@$\@%\@&\@'\@(@@@/[@K'@@ @\@\@\@\@\@\@@@@[@-=@@#@\@\@\@\@\@\@@@@[@S@@9@\@\@\@\@\@\@@@@[@i@@O@.\@Ǡ\@Ƞ \@ɠ\@ʠ\@ˠ\@@@@[@@@e@D\@\@!\@$\@'\@*\@@@@[@@@{@Z2\@,\@7\@:\@=\@@\@@@@[@@@@pH\@B\@M\@P\@S\@V\@@@@[@@@@Ԇ^Z@dTZ@m^Z@jb\@nd\@of\@p@@@[@@@@ԗ\@=fopqr@@@_[@~@ L%a:@ this@ constructor@ application@ may@ be@ TMC-transformed@ in@ several@ different@ ways.@ Only@ one@ of@ the@ arguments@ may@ become@ a@ TMC@ call,@ but@ several@ arguments@ contain@ calls@ that@ are@ explicitly@ marked@ as@ tail-recursive.@ Please@ fix@ the@ conflict@ by@ reviewing@ and@ fixing@ the@ conflicting@ annotations.@@ԟ@@@`[@-[@,@@@@,ˠ|@@@[@\@@డ.(+inline_code%Style@ @@;@@% @@0[@tail_mod_cons]@@a@@0[@K@@Td@@&@neA@Y@Ml@A@i@@ఠ&submgs1@A@@@@@H@@@GY@N3@@@@@@@ఠ#sub2@A@@@_@@@VZ@P@@Q@@@Z@R@@SZ@O"@࣠@$info4A@%A@г4tmc_call_information @@#@@@T3@@7()i@@@  @@,-@@@0 @@@@@ఠ#loc5:1;4@MA@@mn@@@j\@Z3>==>>>>>@ :H@@@W@4@5@@@డ/Scoped_location+to_location)DebuginfoZ7[@@ ^A_P@@cQd\@ @m @@@m@@@_@@^m@@@]@@\.@@ఐn$info}]~a@:@@h0@@@p@nB@#locbe@h:@@@@@oL@@6@@PM@A@-@@డ#msg(Locationiwi@ ii@@@@ߠn<@@@@@@~@@}@ޠ[@w@@@z@@@{@@@|@@@y@@x@@v@@u3@@@@@@ภdఐ#locii@@@no@@@\@\@@@@ @@@ @@ภ10°iA.ภ;ˠ  "This call is explicitly annotated.@@@@@\@\@@@ภOߠԬԫ@@#`[@[@]@̠:@@@\@\@ڠ9@@@\@\@۠ @@@\@f@@<@A]@ @@@\@r@>L@L@G@@@\@\@}@@S@@p-&J@@@\@@@'@@@(@@@&)A@\Z@0@A@-@డ$List#mapcapdat@ gauhax@@9@@@@w@@@>[@@@|@@@<[@@@@@@;@@@@@:@@@@@@@3@@@@@@@ఐ#subaya|@ @@@@@@:@@9@@@8@@7@@A @@@b8@@@+@@*a7@@@)@@('@@డ'$List&filter!%@ &,@@@@@@5@@@\@b@@h@@@g@@f@@e@@@@d@@c @@@a@@`@@_^@@࣠@$info6A37@A@г(4tmc_call_information9M@@0@@@3@~@@@@ 2 N@@@8@@@@ఐ%$infoRV@F@@@@%@&@@i@@@@3@7 @@@(explicit)W*_@i԰@@A@@@^@@2-3`@@@j@@|O@@@{@@z]@]@8@@~ @@@Mu@@@x@@wy@@@v@@uE@@డ$List'flatten\] @ ` a@@E@@@EDz@@@KZ@[@[@[@[@@@@@@@@@L@@@@@z@@డ$List#map@ @@i@@@@c@@@^@@@騠@@@@@@^@@@@@@o@@@@@n@@@@@@@@@࣠@!t7A@A@@,3@F@@@@@@ఐ!t@;@@@@<3@W@@@)tmc_calls@cJ @@> @@@@P@@K@@_@_@$@@a @@@X@@@@@W@@@@@1@@ఐ)arguments  @@@ˠcv@@@ @@@ ]@]@ I@@/@@@@@@@@\@]@V@@@@3@@@[@\@_@@%@@@@@JZ@[@h@@.@@Zi@@@[T@A@:@@ภ$SomeA!B!@ՠడL&errorf(LocationQ!R!@ U!V!@@6@@6p@@@3@@@2@@142p@@@0@@@/@@@.@@-/-@@@,@@@+@@*@+@@2@@@QX@@@0@@@RX@@@X@^@@_1@@@X@X@`@@aX@$C@@@'@@@@(1@@@)@@@&@@%+@@#@@"@@!@@ 3@@@@@@ภLఐࠐ#loc!!@s@@qW@@@]Y@eY@d@@@ @@@f @ภiఐ&submgs!!@/@@@@@Z@@@YY@iY@g=@@ @@@@kA@ภ@@.@@@n@@@m@@lQ@@ภJڠI۰ ! !AHภU ภ]׺׹@@1X@SX@X@X@X@Z@Z@@@@Y@@@)@GZ@~X@@@@Y@@"%t<@<@P@@@Y@Y@@@CB@@Ϡ .@@@PY@@@ఐ*)print_msgb!c!@}@@X@@@h!i!@@@@*@@ߠ@@@@6@@@ @@#@@u"v"@@2@@@2p@@@ภ$None##@چ@@@2y@@AP@@@$@@@2@@@@@22@@@@@@@@V@V@2@@2@@F@@@V@2@A@ww@@@2@A@A@nhA@A@B@XA@fB@@=@@z@ @1@Ί@@΄@L~@@@@@A@|4B@ @D@%@b @@@@@ZX@64@@@4.3<@3^A3B@3>3X@@@3@3+@@@4.#TmcB@@ 5@>I@2}@˛@Ƞ@Ą@I@;@M@1X@Й@,ՠ@@ H************************************************************************A@@A@L@ H  BMMBM@ H OCaml CC@ H DD3@ J Frédéric Bour E44 E4@ H Gabriel Scherer, projet Partout, INRIA Saclay %F&F@ I Basile Clément, projet Cambium, INRIA Paris +G,G@ H 1H2Hj@ H Copyright 2020 Institut National de Recherche en Informatique et 7Ikk8Ik@ H en Automatique. =J>J@ H CKDKQ@ H All rights reserved. This file is distributed under the terms of ILRRJLR@ H the GNU Lesser General Public License version 2.1, with the OMPM@ H special exception on linking described in the file LICENSE. UNVN8@ H [O99\O9@ H************************************************************************aPbP@ 5 Error-reporting information for ambiguous TMC calls gThT@ * When [explicit = true], we have an ambiguity between arguments containing calls that have been explicitly marked [@tailcall]. Otherwise we have an ambiguity between un-annotated calls.  V* In the OCaml value model, interior pointers are not allowed. To represent the "placeholder to mutate" in DPS code, we thus use a pair of the block containing the placeholder, and the offset of the placeholder within the block. In the common case, this offset is an arbitrary lambda expression, typically a constant integer or a variable. We define ['a destination] as parametrized over the offset type to represent formal destination parameters (where the offset is an Ident.t), and maybe in the future statically-known offsets (where the offset is an integer). } * The type [Constr.t] represents a reified constructor with a single hole, which can be either directly applied to a [lambda] term, or be used to create a fresh [lambda destination] with a placeholder. v Y* [apply constr e] plugs the expression [e] in the hole of the constructor [const]. L t* [with_placeholder constr body] binds a placeholder for the constructor [constr] within the scope of [body].  * We may want to delay the application of a constructor to a later time. This may move the constructor application below some effectful expressions (for example if we move into a context of the form [foo; bar_with_tmc_inside]), and we want to preserve the evaluation order of the other arguments of the constructor. So we bind them before proceeding, unless they are obviously side-effect free. [delay_impure ~block_id constr body] binds all inpure arguments of the constructor [constr] within the scope of [body], which is passed a pure constructor. [block_id] is a counter that is used as a suffix in the generated variable names, for readability purposes. ٠ Q we choose a placeholder whose tagged representation will be reconizable. ~ei@ Note that the delayed subterms will be used exactly once in the linear-static subterm. So we are happy to delay constants, which we would not want to duplicate. 9]@ /* The type ['a Dps.t] (destination-passing-style) represents a version of ['a] that is parametrized over a [lambda destination]. A [lambda Dps.t] is a code fragment in destination-passing-style, a [(lambda * lambda) Dps.t] represents two subterms parametrized over the same destination. à * A term parameterized over a destination. The [tail] argument is passed by the caller to indicate whether the term will be placed in tail-position -- this allows to generate correct @tailcall annotations. ⠠ * We want to optimize nested constructors, for example: {[ (x () :: y () :: tmc call) ]} which would naively generate (in a DPS context parametrized over a location dst.i): {[ let dstx = x () :: Placeholder in dst.i <- dstx; let dsty = y () :: Placeholder in dstx.1 <- dsty; tmc dsty.1 call ]} when we would rather hope for {[ let vx = x () in let dsty = y () :: Placeholder in dst.i <- vx :: dsty; tmc dsty.1 call ]} The idea is that the unoptimized version first creates a destination site [dstx], which is then used by the following code. If we keep track of the current destination: {[ (* Destination is [dst.i] *) let dstx = x () :: Placeholder in dst.i (* Destination *) <- dstx; (* Destination is [dstx.1] *) let dsty = y () :: Placeholder in dstx.1 (* Destination *) <- dsty; (* Destination is [dsty.1] *) tmc dsty.1 call ]} Instead of binding the whole newly-created destination, we can simply let-bind the non-placeholder arguments (in order to preserve execution order), and keep track of a list of blocks to be created along with the current destination. Instead of seeing a DPS fragment as writing to a destination, we see it as a term with shape [dst.i <- C .] where [C .] is a linear context consisting only of constructor applications. {[ (* Destination is [dst.i <- C .] *) let vx = x () in (* Destination is [dst.i <- C (vx :: .)] *) let vy = y () in (* Destination is [dst.i <- C (vx :: vy :: .)] *) (* Making a call: reify the destination *) let dsty = vy :: Placeholder in dst.i <- vx :: dsty; tmc dsty.1 call ]} The [delayed] argument represents the context [C] as a list of reified constructors, to allow both to build the final holey block ([vy :: Placeholder]) at the recursive call site, and the delayed constructor applications ([vx :: dsty]). In practice, it is not desirable to perform this simplification when there are multiple TMC calls (e.g. in different branches of an [if] block), because it would cause duplication of the nested constructor applications. The [delayed_use_count] field keeps track of this information, it counts the number of syntactic use sites of the delayed constructors, if any, in the generated code. Θ * Create a new destination-passing-style term which is simply setting the destination with the given [v], hence "returning" it. Ġ s* Ensures that the resulting term does not duplicate delayed constructors by reifying them now if needed.  * The TMC transformation requires information flows in two opposite directions: the information of which callsites can be rewritten in destination-passing-style flows from the leaves of the code to the root, and the information on whether we remain in tail-position flows from the root to the leaves -- and also the knowledge of which version of the function we currently want to generate, the direct version or a destination-passing-style version. To clarify this double flow of information, we split the TMC transform in two steps: 1. A function [choice t] that takes a term and processes it from leaves to root; it produces a "code choice", a piece of data of type [lambda Choice.t], that contains information on how to transform the input term [t] *parameterized* over the (still missing) contextual information. 2. Code-production operators that have contextual information to transform a "code choice" into the final code. The code-production choices for a single term have type [lambda Choice.t]; using a parametrized type ['a Choice.t] is useful to represent simultaneous choices over several subterms; for example [(lambda * lambda) Choice.t] makes a choice for a pair of terms, for example the [then] and [else] cases of a conditional. With this parameter, ['a Choice.t] has an applicative structure, which is useful to write the actual code transformation in the {!choice} function.  @* An ['a Choice.t] represents code that may be written in destination-passing style if its usage context allows it. More precisely: - If the surrounding context is already in destination-passing style, it has a destination available, we should produce the code in [dps] -- a function parametrized over the destination. - If the surrounding context is in direct style (no destination is available), we should produce the fallback code from [direct]. (Note: [direct] is also a function (on [unit]) to ensure that any effects performed during code production will only happen once we do know that we want to produce the direct-style code.) - [tmc_calls] tracks the function calls in the subterms that are in tail-modulo-cons position and get rewritten into tailcalls in the [dps] version. - [benefits_from_dps] is true when the [dps] calls strictly more TMC functions than the [direct] version. See the {!choice_makeblock} case. - [explicit_tailcall_request] is true when the user used a [@tailcall] annotation on the optimizable callsite. When one of several calls could be optimized, we expect that exactly one of them will be annotated by the user, or fail because the situation is ambiguous. v .* Apply function [f] to the transformed term.  Remark: we could define [pure v] as [map (fun () -> v) unit], but we prefer to have the code explicit about using [unit], in particular as it ignores the destination argument. AABB[@ * The [find_*] machinery is used to locate a single subterm to optimize among a list of subterms. If there are several possible choices, we require that exactly one of them be annotated with [@tailcall], or we report an ambiguity.  here is how we will compute the result once we know that there is an unambiguously-determined tmc call, and whether an explicit request was necessary to disambiguate FFGCG@ & we know there is at least one choice GGGH @ [choice_prim] handles most primitives, but the important case of construction [Lprim(Pmakeblock(...), ...)] is handled by [choice_makeblock] EPPGPP@ o [choice_apply] handles applications, in particular tail-calls which generate Set choices at the leaves KQQLQ_Q@ other cases use the [lift] helper that takes the sub-terms in tail position and the context around them, and generates a choice for the whole term from choices for the tail subterms. OQQQRYR@ * mutable bindings are not TMC-specialized [SS[ST@+ decompose hVVhVV@+ transform kVVkVV@) rebuild pWWpWW@+ decompose vXXvXX@+ transform xY YxY Y$@) rebuild |YY|YY@ in [try l1 with id -> l2], the term [l1] is not in tail-call position (after it returns we need to remove the exception handler) ZZ[4[j@ [ In [static-catch l1 with ids -> l2], the term [l1] is in fact in tail-position \\ \2\i@ o Support of tupled functions: the [function_kind] of the direct-style function is identical to the one of the input function, which may be Tupled, but the dps function is always Curried. [find_exact_application] is in charge of recovering the "real" argument list of a possibly-tupled call. `P`\aa@ If we are calling a tmc-specializable function in tail context, then both the direct-style and dps-style calls must be tailcalls. bbcfc@ [@tailcall false] is interpreted as a bailout annotation: "we are (knowingly) leaving the dps calling convention". It only has sense in the DPS version of the generated code, not in direct style.  ff gg@ * An ambiguous term should not lead to an error if it not used in TMC position. Consider for example: {[ type t = ... | K of t * (t * t) let[@tail_mod_cons] rec map f = function | [...] | K (t, (u, v)) -> K ((map[@tailcall]) f t, (map f u, map f v)) ]} Calling [choice_makeblock] on the K constructor, we need to determine whether its two arguments are ambiguous, which is done by calling [choice] on each argument to see if they would be TMC-able and if they are explicitly annotated. These calls give the following results: - there is an explicitly-requested tailcall in the first argument - the second argument is a nested pair whose arguments themselves are ambiguous -- with no explicit annotation. This determines that the arguments of K are not ambiguous, as only one of them is annotated. But note that the nested pair, in isolation, is ambiguous. This inner ambiguity is innocuous and should not result in an error, as we never use this inner pair in TMC position, only in direct style. This example shows that it would be incorrect to fail with an error whenever [choice] finds an ambiguity. Instead we only error when generating the [dps] version of the corresponding code; requesting the [direct] version is accepted and produces the expected direct code. jIjQpup@ Whether or not the caller provides a destination, we can always provide a destination to our settable subterm, so the number of TMC sub-calls is identical in the [direct] and [dps] versions. -uu0vv@ - The important case is the construction case ;ww;wx @ 1 Some primitives have arguments in tail-position $?xyx}%?xyx@ in common cases we just return *Gy|y+Gy|y@ * we don't handle effect or DLS primitives 0`||1`|}!@ # we don't handle atomic primitives 6c}`}d7c}`}@ 3 we don't handle array indices as destinations yet <f}}=f}}@ : we don't handle { foo with x = ...; y = recursive-call } Bi~~Ci~~B@ T operations returning boxed values could be considered constructions someday Hl~W~[Im~~@ c Lazy blocks should never contain a recursive call directly: either it's a closure (Lazy_tag), or a variable (Forward_tag). The case 'let foo = recursive_call in lazy foo' could be translated to use tmc in the cases where 'foo' might be of type lazy or float, but given the fragility of such a transformation we choose not to. NuOy @6 more common cases... T|%)U|%C@ 1 Support of Tupled function: see [choice_apply]. Z[@@*./ocamlopt)-nostdlib"-I(./stdlib"-I1otherlibs/dynlink"-g0-strict-sequence*-principal(-absname"-w8+a-4-9-40-41-42-44-45-48+-warn-error"+a*-bin-annot/-strict-formats"-I&lambda"-I%utils"-I'parsing"-I&typing"-I(bytecomp"-I,file_formats"-I&lambda"-I*middle_end"-I2middle_end/closure"-I2middle_end/flambda"-I=middle_end/flambda/base_types"-I'asmcomp"-I&driver"-I(toplevel"-I%tools"-I'runtime"-I1otherlibs/dynlink"-I-otherlibs/str"-I4otherlibs/systhreads"-I.otherlibs/unix"-I8otherlibs/runtime_events2-function-sections"-c S/home/teraram/ci/builds/workspace/parallel-build/flambda/true/label/ocaml-manycores ?>3210/.-,+*)('&%$#"! @@012gTa d3@@@(Asttypes0eT$BbRM dc5Build_path_prefix_map0zd,J4z8CamlinternalFormatBasics0|.e1R$|o0CamlinternalLazy0zY# #4#-*Cmi_format0{)ݬ[ƥ  *Data_types0v\3,Svh)Debuginfo0_ |PooGq#Env02O<r7 *Format_doc0uy@GmWUࠠ%Ident0>ЃzV)j⠠,Identifiable0]/*N 0x_edT-uq)Load_path0,j " nn7ݠ(Location0nBɊOn?7~ؠ)Longident0wP q;ɡ$Misc0Kvor#2D+Outcometree03DCͰN )Parsetree0v o[pY Y$Path0k.tbGmᠠ)Primitive0i>ŸkTǍ%Shape0 M``ll&Stdlib0t0VoS%{<F:.Stdlib__Buffer0,I[?z.Stdlib__Digest0#z25I*.Stdlib__Domain0'Ϳo\0m.K.Stdlib__Either0HD ?|>.Stdlib__Format00FClW/Stdlib__Hashtbl0(L%bԠ,Stdlib__Lazy0$1mlࠠ.Stdlib__Lexing0^m|e,Stdlib__List0C|Z`>s䠠+Stdlib__Map0*4ɇ2ɠ%Subst0=aqT/!p+0L*mV9yDN렠.Type_immediacy00$ jbv\"k&%Types0"|Vȷ`X )Unit_info0'T Χ@aR(Warnings0Ef{&@@A@CuC@Tu@Єt@˰@@@nx엑@ϕҒ@@,@leN@5?@QKQUϒٻ@x΂@m@@5[5e7հHVH`'@hh8@|@@@@j/j9@aP:@+5*4@@ )3@@=>*@@=͑װMWە]@@Iޒ'@7P7ZG<GF@@@nۑn\fIS@JߑKN@1t@@Ѥ@P8LVP@@FFڑ䝑@&0@LLrߑr)@@Ӱ?I@7R7\xx@vv@J@@@ v@>HSK)7@4>TӦ@@tݑt@>e_t@@ԁOڕ@L-Ԙo@~@@BBJﳒ@ttisu@~~@7A@HHt3=@ܐ @Mmؒ~ґ@SIq)@!+0@REO|@Xb: @ʑ԰O@7(72>@b@`J`TN4/Ԓe@"e"offZ:@U_@LH?P@+@Ε2$.@ӑAc\@@LL@m@ y@ҟҩ@ ,6s@Q@@@@A =Gەh@memo2<@@;E@@xy@MK@@@PW@8@8@@@A@@