Caml1999I037!$%ShapeӠ#Uid @!t ;@@0Compilation_unit&stringQ@@@@@@0typing/shape.mli{ F J{ F f@@A@$Item)comp_unit@@@@@?| g w| g @@/B@"id@@#intA@@@> | g !| g @@=C@$from8@@)Unit_info,intf_or_impl@@@=0| g 1| g @@MD@@@4| g k5| g @@QE@(Internal9@@=}  >}  @@ZF@&Predef:M@@@<@@K~  L~  @@hG@@@@@@@@@Oz 3 5@@@@k@@A@&reinit @$unitF@@@A@@B@@@C@@D@e@  f@  @@M@@"mk ,current_unit&optionLR!t@@@E@@@F@@G@@@H@@I@B  B  '@@N@@6of_compilation_unit_id @%Ident!t@@@J@@K@@@L@@M@C ( *C ( S@@O@@,of_predef_id @!t@@@N@@O/@@@P@@Q@D T VD T u@@P@@@@@@@A@@@@@@@@g@@H@@%union @N@@@@@@U@@@@@X@@@@@@@@~@WI@@%inter @e@@@@@@l@@@@@o@@@@@@@@@nJ@@(disjoint @|@@@@@@@@@@@$boolE@@@@@@@@@K@@$diff @@@@@@@@@@@@@@@@@@@@@L@@(cardinal @@@@@@#intA@@@@@@@M@@(elements @@@@@@$listK@@@@@@@@@@N@@'min_elt @@@@@@ @@@ @@ @@O@@+min_elt_opt @@@@ @@ &optionL@@@@@@@@@@P@@'max_elt @@@@@@@@@@@@'@Q@@+max_elt_opt @@@@@@'@@@@@@@@@<@R@@&choose @#@@@@@@@@@@@L@%S@@*choose_opt @3@@@@@L+@@@ @@@!@@"@a@:T@@$find @9@@@#@@$@O@@@%@@&C@@@'@@(@@)@x@QU@@(find_opt @P@@@*@@+@f@@@,@@-^@@@.@@@/@@0@@1@@mV@@*find_first @@p@@@2@@3@@@4@@5@@6@@@@7@@8~@@@9@@:@@;@@W@@.find_first_opt @@@@@<@@=@@@>@@?@@@@@@@A@@B @@@C@@@D@@E@@F@@X@@)find_last @@@@@G@@H?@@@I@@J@@K@@@@L@@M@@@N@@O@@P@@Y@@-find_last_opt @@@@@Q@@R^@@@S@@T@@U@@@@V@@W@@@X@@@Y@@Z@@[@@Z@@$iter @@@@@\@@]$unitF@@@^@@_@@`@@@@a@@b @@@c@@d@@e@<@[@@$fold @@@@@f@@g@#acc@o@@h@@i@@j@@k@6@@@l@@m@@@n@@p@@q@@r@`@9\@@&filter @@<@@@s@@t@@@u@@v@@w@V@@@x@@yY@@@z@@{@@|@@X^@@*filter_map @@[@@@}@@~b@@@@@@@@@@@y@@@@@|@@@@@@@@@{_@@)partition @@~@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@`@@%split @@@@@@@@@@@@@@@@@>@@@@@@@@@@@@@@@a@@(is_empty @@@@@@T@@@@@@@b@@,is_singleton @@@@@@e@@@@@@@c@@#mem @@@@@@@@@@@@}@@@@@@@@*@d@@%equal @@@@@@@@@@@@@@@@@@@@B@e@@'compare @)@@@@@@0@@@@@@@@@@@@@Z@3f@@&subset @A@@@@@@H@@@@@@@@@@@@@r@Kg@@'for_all @@N@@@@@@@@@@@@@h@@@@@@@@@@@@@@kh@@&exists @@n@@@@@@@@@@@@@@@@@@@@@@@@@@@i@@'to_list @@@@@@٠@@@@@@@@@@j@@+to_seq_from @@@@@@@@@@@@&Stdlib#Seq!t@@@@@@@@@@@@l@@&to_seq @@@@@@#Seq!t@@@@@@@@@@m@@*to_rev_seq @@@@@@3#Seq!t@@@@@@@@@@n@@'add_seq @H#Seq!t@@@@@@@@@@@@@@@@@@@@@@8@o@@&of_seq @g#Seq!t@@@@@@@@*@@@@@@P@)p@@&output @+out_channel@@@@@@@@@@@@@@@@@@@@j@gM@@%print @&Format)formatter@@@@@@\@@@@@@@@@@@@@@N@@)to_string @m@@@@@ &stringQ@@@ @@ @@O@@'of_list @$listKw@@@ @@@ @@@@@@@@@P@@#map @@@@@@@@@@@@@@@@@@@@@@@@@@@@@Q@@@@ϱu@@@Ӡ#Map @#key ;@@@AJ!t@@@@@@@@@@T@A@!t ;!a@@A@A#Map$Makea!t@@@I@B@@@@@@U@A@%empty  !a@@@@@ @E@@#add @@@@@@@@!a@@@@# @@@@@'@@@@@@@@@@-@F@@+add_to_list @"@@@@@@!a@@@@D$listK@@@@@@@@O @@@@@@@@@@@@@Z@ G@@&update @O@@@@@@@&optionL!a@@@@@@  @@@@@@@@@@@@@@@@@@@@@@@@>H@@)singleton @@@@@@@!a@@@@@@@@@@@@WI@@&remove @@@@@@@!a@@@@@@@@@@@@@@@tJ@@%merge @@@@@@@@g!a@@@@@@@t!b@@@@@@}!c@@@@@@@@@@@@@"@@@@@@@@@@@@@@@@@@@@@ @K@@%union @@@@@@@@!a@@@@@@ @@@@@@@@@@@@-@@@@@@5@@@@@9 @@@@@@@@@@?@L@@(cardinal !@G!a@@@@@@ @@@@@@U@M@@(bindings "@]!a@@@@@@@Z@@@@@@@@@@@@u@(N@@+min_binding #@}!a@@@@@@@v@@@@@@@@@@CO@@/min_binding_opt $@!a@ @@@@@ 3@@@@ @@@ @@@ @@@@cP@@+max_binding %@!a@@@@@@@@@@@@@@@@@~Q@@/max_binding_opt &@Ӡ!a@@@@@@n@@@@@@@@@@@@@@R@@&choose '@!a@@@@@@@@@@@@@ @@!@@S@@*choose_opt (@!a@$@@@"@@#@ @@@%@@@&@@@'@@(@&@T@@$find )@@@@)@@*@5!a@-@@@+@@,@@.@@/@?@U@@(find_opt *@4@@@0@@1@N!a@4@@@2@@3 @@@5@@6@@7@]@V@@*find_first +@@V@@@8@@9$boolE@@@:@@;@@<@v!a@?@@@=@@>@o@@@@@@@A@@B@@C@@]@@$mapi 2@@@@@@@@!a@@@!b@@@@@@@@@@@@@@@@@@@@@ @ g^@@&filter 3@@@@@@@@!a@@@_@@@@@@@@@@Ӡ@@@@@נ@@@@@@@@ @ _@@*filter_map 4@@@@@@@@!a@@@!b@@@@@@@@@@@@@@@@@@@@@@@@ @ `@@)partition 5@@@@@@@@!a@@@@@@@@@@@@@*@@@@@@2@@@Ġ@8@@@@@@@@@@ >@ a@@%split 6@3@@@@@@M!a@@@@@@@Y @@@Ϡ@@@@͠@f@@@@@@@@@@ l@ b@@(is_empty 7@t!a@@@@@@@@@@@@ @ 5c@@,is_singleton 8@!a@@@@@@&@@@@@@ @ Kd@@#mem 9@@@@@@@!a@@@@@@C@@@@@@@@ @ he@@%equal :@@!a@@@@@@]@@@@@@@@@@Ѡ@@@@@@٠@@@@@q@@@@@@@@@@ @ f@@'compare ;@@!a@@@@@@ @@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ @ g@@'for_all <@@ @@@@@@!a@ @@@@@@@@@@@ @0@@@ @@ @@@ @@@@@ :@ h@@&exists =@@3@@@@@@!a@@@@@@@@@@@@@Y@@@@@@@@@@@@@ c@ i@@'to_list >@k!a@@@@@@,@h@@@ @@@!@@@"@@#@ @ 6j@@&to_seq ?@!a@&@@@$@@%&Stdlib#Seq!t@@@@'@@@(@@@)@@*@ @ \l@@*to_rev_seq @@!a@-@@@+@@,&#Seq!t@@@@.@@@/@@@0@@1@ @ m@@+to_seq_from A@@@@2@@3@۠!a@6@@@4@@5P#Seq!t@@@@7@@@8@@@9@@:@@;@ @ n@@'add_seq B@k#Seq!t@@@@<@!a@B@@=@@@>@@?@ @@@@@@A@@@C@@D@@E@ !@ o@@&of_seq C@#Seq!t@!@@@F@!a@J@@G@@@H@@I>@@@K@@L@ D@ p@@'of_list D@@A@@@M@!a@Q@@N@@@O@@P^@@@R@@S@ d@ aV@@.disjoint_union E"eq&optionL@!a@g@@T@@@U$boolE@@@V@@W@@X@@@Y@@Z%print@ ?&Format)formatter@@@[@@\@'@@] :@@@^@@_@@`@@@a@@b@3@@@c@@d@;@@@e@@f?@@@h@@i@@j@@k@@l@ @ W@@+union_right F@ !a@q@@@m@@n@Π @@@o@@pҠ@@@r@@s@@t@ @ X@@*union_left G@!a@y@@@u@@v@ @@@w@@x@@@z@@{@@|@ @ Y@@+union_merge H@@!a@@@}@@@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ Z@@&rename I@(@@@@@@@@@ @@@@@#@@@@@@@@ ;@ 8[@@(map_keys J@@4@@@@@7@@@@@@@@Q!a@@@@@@Y@@@@@@@@ _@ \\@@$keys K@g!a@@@@@@ #Set$Make !t@@@@@@ {@ x]@@$data L@!a@@@@@@ @@@@@@ @ ^@@&of_set M@@@@@@@!a@@@@@@ V#Set$Make !t@@@@@@@@@@@@@ @ _@@7transpose_keys_and_data N@@@@@@@@@Ƞ@@@@@@@@@ @ `@@;transpose_keys_and_data_set O@٠@@@@@@@@ #Set$Make W!t@@@@@@@@@ @ a@@%print P@@ &Format)formatter@@@@@@!a@@@ @@@@@@@@@@ &Format)formatter@@@@@@@@@@@ @@@@@@@@@@(@%b@@@@)&v@@@Ӡ#Tbl @#key Q;@@@A !t@@@@@@@<@@@9h@A@!t R;!a@@A@A 'Hashtbl$Make !t@@@O@B@@@V@@@Si@A@&create S@3@@@@@(!a@@@@@@@m@Ng@@%clear T@!a@@@@@@$unitF@@@@@@@fh@@%reset U@+!a@@@@@@@@@@@@@|i@@$copy V@A!a@@@@@@I@@@@@@@j@@#add W@W!a@@@@@@@@@@@@@@@P@@@@@@@@@@@k@@&remove X@y!a@@@@@@@"@@@@@m@@@@@@@@@l@@/find_and_remove Y@!a@@@@@@@?@@@@@&optionL@@@@@@@@@m@@$find Z@!a@@@@@@@_@@@@@ @@@@@)@ n@@(find_opt [@Ϡ!a@@@@@@@x@@@@@9@@@@@@@@G@(o@@(find_all \@!a@@@@@@@@@@@@$listK@@@@@@@@g@Hp@@'replace ]@ !a@@@@@@@@@@@@@@@@@@@@@@@@@@iq@@0find_and_replace ^@.!a@@@@@@@@@@@@@@@@@@@@@@@@@@r@@#mem _@P!a@@@@@@@@@@@@@@@@@@@@@s@@$iter `@@@@@@@@!a@@@ a@@@ @@ @@ @@ @@@@@@m@@@@@@@@@t@@2filter_map_inplace a@@7@@@@@@!a@@@@@@@@@@@@@@@@@@@@@@@@@ @@u@@$fold b@@a@@@!@@"@!a@)@@#@#acc@-@@$@@%@@&@@'@@(@۠@@@*@@+@@@,@@.@@/@@0@G@(v@@&length c@!a@1@@@2@@3,@@@4@@5@]@>w@@%stats d@!a@6@@@7@@8T*statistics@@@9@@:@v@Wx@@&to_seq e@!a@=@@@;@@<&Stdlib#Seq!t@@@@>@@@?@@@@@@A@@}y@@+to_seq_keys f@B@@B@@@C@@D$#Seq!t@@@E@@@F@@G@@z@@-to_seq_values g@]!a@J@@@H@@IA#Seq!t @@@K@@L@@{@@'add_seq h@w!a@O@@@M@@N@_#Seq!t@+@@@P@@@Q@@@R@@Sy@@@T@@U@@V@@|@@+replace_seq i@!a@Y@@@W@@X@#Seq!t@V@@@Z@@@[@@@\@@]@@@^@@_@@`@'@}@@&of_seq j@#Seq!t@u@@@a@!a@e@@b@@@c@@d@@@f@@g@J@+~@@'to_list k@!a@j@@@h@@i @!t@@@k@@@l@@@m@@n@l@ij@@'of_list l@ Ӡ@!t@@@o@!a@s@@p@@@q@@r&@@@t@@u@@k@@&to_map m@4!a@x@@@v@@wK#Map$Make!t@@@y@@z@@l@@&of_map n@`#Map$Make'!t!a@}@@@{@@|`@@@~@@@@m@@'memoize o@n!a@@@@@@@@@@@@@@@@@@"@@@@@@@@@@@@@n@@#map p@!a@@@@@@@@ @@!b@@@@@@@@@@@@@@ o@@@@ w@@@@@y " "J  @T@@@Ӡ2Sig_component_kind @!t q;@@%Valuet@@N"&N"-@@+V@$Typeu@@O.2O.8@@4W@+Constructorv@@ P9=!P9J@@=X@%Labelw@@)QKO*QKV@@FY@&Modulex@@2RW[3RWc@@OZ@+Module_typey@@;Sdh<Sdu@@X[@5Extension_constructorz@@DTvzETv@@a\@%Class{@@MUNU@@j]@*Class_type|@@VVWV@@s^@@@A@@@@@ZM@@A@vU@A@)to_string r@d@@@@@p@@@@@@nXoX@@_@@3can_appear_in_types s@@@@@@@@@@@@[[@@@`@@@@L  \AD@a@@@Ӡ$Item @!t t;@@@A@@@@_@!t@@@^@@`@@@@cPRcPx@@@@b@A@$name u@%@@@a@@b@@@c@@d@dy{dy@@c@@$kind v@@@@e@@f+!t@@@g@@h@ee@@d@@$make w@@@@i@@j@E!t@@@k@@l7@@@m@@n@@o@gg@@ e@@%value x@i!t@@@p@@qM@@@r@@s@ii@@!f@@%type_ y@!t@@@t@@uc@@@v@@w@j j!@@7g@@&constr z@!t@@@x@@yy@@@z@@{@0k"$1k"=@@Mh@@%label {@!t@@@|@@}@@@~@@@Fl>@Gl>X@@ci@@'module_ |@!t@@@@@@@@@@@\mY[]mYu@@yj@@+module_type }@!t@@@@@@@@@@@rnvxsnv@@k@@5extension_constructor ~@!t@@@@@@@@@@@oo@@l@@&class_ @!t@@@@@@@@@@@pp@@m@@*class_type @!t@@@@@@@@@@@qq@@n@@%print @&Stdlib&Format)formatter@@@@@@@@@@@w@@@@@@@@ss*@@o@@Ӡ#Map @#key ;@@@A3@@@@@@@u,Fu,R@@@@p@A@!t ;!a@@A@A@I@B@@@'map.mliI V ZI V e@@@@+Stdlib__MapD@A@%empty !a@@@@@L  L  @@E@@#add @=@@@@@@!a@@@@& @@@@@*@@@@@@@@@@9O  :O  @@8F@@+add_to_list @%@@@@@@!a@@@@J$listK@@@@@@@@U @@@@@@@@@@@@@iX  jX  @@hG@@&update @U@@@@@@@&optionL!a@@@@@@  @@@@@@@@@@@@@@@@@@@@@@@^^@@H@@)singleton @@@@@@@!a@@@@@@@@@@@jW[jW{@@I@@&remove @@@@@@@ !a@@@@@@ʠ@@@@@@@@oo@@J@@%merge @@@@@@@@p!a@@@@@@@}!b@@@@@@!c@@@@@@@@@@@@@ "@@@@@@@@@@@@@@@@@@@@@$vY]%x@@#K@@%union @@@@@@@@!a@@@@@@à @@@@@@@@@@@@B@@@@@@J@@@@@N @@@@@@@@@@]fj^f@@\L@@(cardinal @_!a@@@@@@#intA@@@@@@xy@@wM@@(bindings @z!a@@@@@@5@t@@@@@@ @@@ @@ @8<8a@@N@@+min_binding @!a@@@@ @@ @@@@@@@@@@bfb@@O@@/min_binding_opt @!a@@@@@@M@@@@@@@@@@@@@JNJ|@@P@@+max_binding @ޠ!a@@@@@@@@@@@@@@@@484[@@Q@@/max_binding_opt @!a@!@@@@@ @@@@"@@@#@@@$@@%@ @@R@@&choose @!a@(@@@&@@'@@@@)@@@*@@+@;<@@:S@@*choose_opt @=!a@.@@@,@@-Ϡ@7@@@/@@@0@@@1@@2@^_@@]T@@$find @J@@@3@@4@g!a@7@@@5@@6@@8@@9@z{@@yU@@(find_opt @f@@@:@@;@!a@>@@@<@@= @@@?@@@@@A@IMIs@@V@@*find_first @@@@@B@@C$boolE@@@D@@E@@F@!a@I@@@G@@H@@@@J@@@K@@L@@M@    D@@W@@.find_first_opt @@@@@N@@O/@@@P@@Q@@R@۠!a@U@@@S@@Tm@@@@V@@@W@@@X@@Y@@Z@"*"."*"l@@X@@)find_last @@@@@[@@\a@@@]@@^@@_@ !a@b@@@`@@a@@@@c@@@d@@e@@f@)#_#c*#_#@@(Y@@-find_last_opt @@@@@g@@h@@@i@@j@@k@:!a@n@@@l@@m̠@4@@@o@@@p@@@q@@r@@s@[$y$}\$y$@@ZZ@@$iter @@K@@@t@@u@!a@{@@v$unitF@@@w@@x@@y@@z@v@@@|@@}@@@~@@@@@%%%& @@[@@$fold @@y@@@@@@!a@@@@#acc@@@@@@@@@@@@@@@@@@@@@@@@@@@'%')'3'l@@\@@#map @@!a@@@!b@@@@@@ˠ@@@@@Ϡ@@@@@@@@(e(i(e(@@]@@$mapi @@@@@@@@!a@@@!b@@@@@@@@@@@@@@@@@@@@@ )) ))@@ ^@@&filter @@@@@@@@!a@@@w@@@@@@@@@@#@@@@@'@@@@@@@@6**7**@@5_@@*filter_map @@&@@@@@@!a@@@Ѡ!b@@@@@@@@@@@T@@@@@X@@@@@@@@g ,,h ,,?@@f`@@)partition @@W@@@@@@!a@@@@@@@@@@@@@@@@@@@@@@Π@@@@@@@@@@@.../%@@a@@%split @@@@@@@!a@@@@@@@ @@@٠@B@@@נ@@@@@@@@@@@$0'0+$0'0\@@b@@(is_empty @Р!a@@@@@@4@@@@@@022!022;@@c@@,is_singleton @!a@@@@@@M@@@@@@32l2p32l2@@d@@#mem @@@@@@@ !a@@@@@@m@@@@@@@@ 822!823@@e@@%equal @@!a@@@@@@@@@@@@@@@@6@@@@@@>@@@@@@@@@@@@@@@Q<3j3nR<3j3@@Pf@@'compare @@!a@@@@@@@@@@@@@@@@g@@@@@@o@@@@@ @@@ @@ @@ @@ @B44B44@@g@@'for_all @@r@@@ @@@!a@@@@@@@@@@@@@@@@@@@@@@@@@@F5r5vF5r5@@h@@&exists @@@@@@@@!a@!@@@@@@@@@@@ @Ǡ@@@"@@#'@@@$@@%@@&@K66"K66Q@@i@@'to_list @ܠ!a@)@@@'@@(@@@@*@@@+@@@,@@-@R66R67@@j@@'of_list @@@@@.@!a@2@@/@@@0@@1@@@3@@4@ V7]7a!V7]7@@k@@&to_seq @"!a@7@@@5@@6&Stdlib#Seq!t@"@@@8@@@9@@@:@@;@I\888<J\888a@@Hl@@*to_rev_seq @K!a@>@@@<@@=)#Seq!t@H@@@?@@@@@@@A@@B@o`88p`88@@nm@@+to_seq_from @[@@@C@@D@x!a@G@@@E@@FV#Seq!t@u@@@H@@@I@@@J@@K@@L@d9;9?d9;9p@@n@@'add_seq @t#Seq!t@@@@M@!a@S@@N@@@O@@P@ @@@Q@@R@@@T@@U@@V@i: :i: :=@@o@@&of_seq @#Seq!t@@@@W@!a@[@@X@@@Y@@Z@@@\@@]@m::m::@@p@@@@u,.@ q@@@@@b>>vSV@r@@@#var ;@@@Ak!t@@@w@@@@xXXxXj@@@@ s@A@!t ;@@#uid@@/!t@@@z@@@{ykvyk@@9w@$desc@@$desc @@@y*yk+yk@@Gx@,approximated@@c@@@x6yk7yk@@Sy@@@A@@@@@:ykk;yk@@@@Wt@A@;@@#VarS@@@@@L{M{@@iz@#Abs@@@T@@@@@^|_|@@{{@#App@@@@@@@@o}p}@@|@&Struct#Map!t'@@@@@@@@~~@@}@%Alias5@@@@@@@~@$Leaf@@@@@$ProjK@@@/!t@@@~@@1@@@@)Comp_unit@@@}@@242I@@A@%Error@@@|@@JLJ]@@B@@@A@@@@@z@@@@u@B@%print @&Format)formatter@@@@@@@@@@@@@@@@@@@___@@ C@@2strip_head_aliases @@@@@@@@@@@@@@D@@9for_unnamed_functor_param @@@@  @@(E@@)fresh_var $name$@@@@@@@@@!t@@@@@@@@@@@@@@@@@@@@89@@UF@@#var @0!t@@@@@@!t@@@@@@@@@@@@@WX:@@tG@@#abs #uidLT!t@@@@@@@@@+@@@@@@ @@@@@#@@@@@@@@@@;;;`@@H@@#app #uidu}!t@@@@@@@@@B@@@@@#argK@@@@@N@@@@@@@@@@aaa@@I@@#str #uid!t@@@@@@@@@N#Map!tt@@@@@@@@x@@@@@@@@@@J@@%alias #uidʠ!t@@@@@@@@@@@@@@@@@@@@@@@@K@@$proj #uid!t@@@@@@@@@@@@@@@!t@@@@@@@@@@@@@@@"#@@?L@@$leaf @!t@@@@@@@@@@@78@@TM@@-decompose_abs @@@@@@Ӡ@@@@ޠ@@@@@@@@@@@@XY>@@uN@@3for_persistent_unit @k@@@@@@@@@@@l@@m@e@@O@@/leaf_for_unpack @@@@xffyf}@@P@@Ӡ#Map @%shape ;@@@A/@@@@@@@@@@@Q@A@!t ;@@@A#Map!tD@@@@@@@@@@@@@@R@@@%empty @@@@@@S@@#add @@@@@@@I!t@@@@@@K@@@@@%@@@@@@@@@@@@T@@)add_value @5@@@@@@U!t@@@@@@!t@@@@@K@@@@@@@@@@%@@U@@.add_value_proj @[@@@@@@{!t@@@@@@K@@@@@o@@@@@@@@@@&(&W@@:V@@(add_type @@@@@@@!t@@@@@@o@@@@@@@@@@@@ @@ @AY[BY@@^W@@-add_type_proj @@@@ @@ @!t@@@ @@@@@@@@@@@@@@@@@@ef@@X@@*add_constr @@@@@@@!t@@@@@@@@@@@@@@@@@@@@@@@Y@@/add_constr_proj @@@@@@ @ !t@@@!@@"@@@@#@@$@@@%@@&@@'@@(@@@Z@@)add_label @@@@)@@*@/!t@@@+@@,@!t@@@-@@.%@@@/@@0@@1@@2@E@@[@@.add_label_proj @5@@@3@@4@U!t@@@5@@6@%@@@7@@8I@@@9@@:@@;@@<@FHFw@@ \@@*add_module @Y@@@=@@>@y!t@@@?@@@@I@@@A@@Bm@@@C@@D@@E@@F@ y{ y@@ 8]@@/add_module_proj @}@@@G@@H@!t@@@I@@J@m@@@K@@L@@@M@@N@@O@@P@ ? @@@ \^@@/add_module_type @@@@Q@@R@!t@@@S@@T@H!t@@@U@@V@@@W@@X@@Y@@Z@ e f @@ _@@4add_module_type_proj @@@@[@@\@!t@@@]@@^@@@@_@@`@@@a@@b@@c@@d@  E@@ `@@+add_extcons @@@@e@@f@ !t@@@g@@h@@@@i@@j@@@k@@l@@m@@n@ GI Gu@@ a@@0add_extcons_proj @@@@o@@p@ /!t@@@q@@r@@@@s@@t#@@@u@@v@@w@@x@ vx v@@ b@@)add_class @3@@@y@@z@ S!t@@@{@@|@!t@@@}@@~I@@@@@@@@@@  @@!c@@.add_class_proj @Y@@@@@@ y!t@@@@@@I@@@@@m@@@@@@@@@@!! @@!8d@@.add_class_type @}@@@@@@ !t@@@@@@$!t@@@@@@@@@@@@@@@!A  !B <@@!^e@@3add_class_type_proj @@@@@@@ !t@@@@@@@@@@@@@@@@@@@@@!e=?!f=s@@!f@@@@!i!jtw@!g@@@)dummy_mod @@@@!uyy!vy@@!h@@'of_path *find_shape@ !t@@@@@@ !t@@@@@=@@@@@@@@@)namespace !t@@@@@@$Path!t@@@@@W@@@@@@@@@@!! @@!i@@/set_uid_if_none @g@@@@@@!t@@@@@s@@@@@@@@!!3@@!j@@@&U9%Shape0 M``ll)Unit_info0'T Χ@aR-Stdlib__Uchar0=H^V9>ɠ+Stdlib__Set0ܔ@Z8XWaa2+Stdlib__Seq0?72#[O+Stdlib__Map0*4ɇ2.Stdlib__Domain0'Ϳo\0m.K.Stdlib__Buffer0,I[?z&Stdlib0t0VoS%{<F:$Path0k.tbGmᠠ,Identifiable0]/*N %Ident0>ЃzV)j⠠*Format_doc0uy@GmWUࠠ8CamlinternalFormatBasics0|.e1R$|o@@@Caml1999T037G dC%Shape*ocaml.text&_none_@@A q Shapes are an abstract representation of modules' implementations which allow the tracking of definitions through functor applications and other module-level operations. The Shape of a compilation unit is elaborated during typing, partially reduced (without loading external shapes) and written to the [cmt] file. External tools can retrieve the definition of any value (or type, or module, etc) by following this procedure: - Build the Shape corresponding to the value's path: [let shape = Env.shape_of_path ~namespace env path] - Instantiate the [Shape_reduce.Make] functor with a way to load shapes from external units and to looks for shapes in the environment (usually using [Env.shape_of_path]). - Completely reduce the shape: [let shape = My_reduce.(weak_)reduce env shape] - The [Uid.t] stored in the reduced shape should be the one of the definition. However, if the [approximate] field of the reduced shape is [true] then the [Uid.t] will not correspond to the definition, but to the closest parent module's uid. This happens when Shape reduction gets stuck, for example when hitting first-class modules. - The location of the definition can be easily found with the [cmt_format.cmt_uid_to_decl] table of the corresponding compilation unit. See: - {{:https://icfp22.sigplan.org/details/mlfamilyworkshop-2022-papers/10/Module-Shapes-for-Modern-Tooling} the design document} - {{:https://www.lix.polytechnique.fr/Labo/Gabriel.Scherer/research/shapes/2022-ml-workshop-shapes-talk.pdf} a talk about the reduction strategy 0typing/shape.mliP88r  @@@@@@3@@@@@@#intA;@@#intA@@@@@;@A@$charB;@@$charA@@@@@A@A@&stringQ;@@&stringA@@@@@G@@@%bytesC;@@%bytesA@@@@@M@@@%floatD;@@%floatA@@@@@S@@@$boolE;@@%falsec@@]@$trued@@c@@@A@@@@@d@A@$unitF;@@"()e@@n@@@A@@@@@o@A@ #exnG;@@@A@@@@@s@@@#effH;@@O@A@A@@@@@@|@@@,continuationI;@@Q@@P@B,continuationA@nY@@@@@@@@@%arrayJ;@@R@A%arrayA@@@@@@@@@ $listK;@@S@A"[]f@@@"::g@@@T@@@ @@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\#$@@@A366@'FailureY#,@'@@A<??@0Invalid_argumentX#5@0@@AE$H#H@-Match_failureV#>@@=@9@;@@a@@AV5Y4Y@)Not_foundZ#O@@@A^=a<a@-Out_of_memoryW#W@@@AfEiDi@.Stack_overflow^#_@@@AnMqLq@.Sys_blocked_io_#g@@@AvUyTy@)Sys_error[#o@j@@A^]@:Undefined_recursive_modulea#x@@w@s@u@@h@@Aon@:Continuation_already_takenb#@@@Awv@&Stdlib@A#UidrAy " )y " ,@T@@БA+!tBz 3 :z 3 ;@@;@@0Compilation_unit@@@{@@{ F J{ F f@@A@$Item)comp_unit@@@@@|| g w| g @@B@"id@@@@@| g | g @@C@$from8@@)Unit_info,intf_or_impl@@@k| g | g @@D@@@| g k| g @@E@(Internal9@@}  }  @@ F@&Predef:@@@n@@~  ~  @@G@@@@@@@@@z 3 5@@@@@@@#ZZ { F L{ F \@S@г\&string{ F `]@@c3@s;@@@@@@@@@@@@@Ab@@@@d@#``!| g m"| g q@6@#bb](| g @\@@Ш@гe&string1| g 2| g @@m@@p@@}@l@#hhc:| g @b@@Ш@гk#intC| g D| g @@s-@@v@@0@r@#nneL| g @d@@Ш@гq)Unit_infoW| g X| g @v[| g t@u@@Ev@@@@lH@z@@@v@#rrd}  p@o@@@s@#ooj~  k~  @h@гq&stringt~  r@@x]s@@@@u@@@@q@@3srrsssss@q@Aru@&reinit;@  @  @б@г/$unit@  @  @@ @@@3@@A@@г>$unit@  @  @@ @@@@@@@@@@ @@@@   @@M@@@@"mk<B  B  @б,current_unitг&optionB  B  !@г!t)Unit_infoB  B  @ B  B  @@@@@@3@H]4@A @@@" @@@@@г;!tB  &B  '@@ @@@@@8@@@@B   @@@B  @@ N@@@@ 6of_compilation_unit_idfC ( .C ( D@б@г%Ident!t%IdentC ( GC ( L@ C ( MC ( N@@@@@@ 53@Dn*@A @@гy!t$C ( R%C ( S@@ @@@ 6@@@@@ 7@@ 8 @@@1C ( * @@IO@@@@,of_predef_idg<D T Z=D T f@б@г=!t%IdentKD T iLD T n@ OD T oPD T p@@@@@@ 93RQQRRRRR@<\(@A @@г!t_D T t`D T u@@ @@@ :@@@@@ ;@@ < @@@lD T V @@P@@@@3@!4@A@@гd$boolG  G  @@ @@@ ?@@@@@ @@@ A @@@G   @@R@@@@УР,Identifiable!S,IdentifiableI  I  @ I  I  @@3@6K"@A @@!tw@!tI  I  @+ @;@@@AJ@@@@@@@I  I  @@@@ S@@@Aг !tI   @@$ @@ @@ӱ!T>C@!tGC;@@@Ai@@@@@@@@@@@@,Identifiabler@A@%equalH@@@@@@@@@@@@$boolE@@@@@@@@@/Stdlib__Hashtblb@@$hashI@@@@@@#intA@@@@@@1@c@@'compareJ@/@@@@@@6@@@@@#intA@@@@@@@@K@+Stdlib__MapA@@&outputK@&Stdlib+out_channel@@@@@@V@@@@@$unitF@@@@@@@@k@jC@@%printL@ &Format)formatter@@@@@@t@@@@@@@@@@@@@@D@@@@s@@@?@!t@@@@@@  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A@('@@@@@@0/@@@@@@@@@@@@@@}@{B@zw@@@@@@GF@@@@@w@@@@@@@@@t@sC@rq@@@@@@_^@@@@@q@@@@@@@@@p@ӱ#SetDC@#eltMC;@@@As!t@@@?@@@@ @@@K@A@!tNC;@@@A#Set$Make!t@@@>@@@@@@@L@A@%emptyO@@@=@%@+Stdlib__SetE@@#addP@4@@@<@@;@@@@:@@9@@@8@@7@@6@>@F@@)singletonQ@@@@5@@4*@@@3@@2@N@)G@@&removeR@(@@@1@@0@>@@@/@@.A@@@-@@,@@+@e@@H@@%unionS@N@@@*@@)@U@@@(@@'X@@@&@@%@@$@|@WI@@%interT@e@@@#@@"@l@@@!@@ o@@@@@@@@@nJ@@(disjointU@|@@@@@@@@@@@$boolE@@@@@@@@@K@@$diffV@@@@@@@@@@@@@@@@@@@@@L@@(cardinalW@@@@@@ #intA@@@ @@ @@M@@(elementsX@@@@ @@ $listK@@@@@@@@@@N@@'min_eltY@@@@@@@@@@@@@O@@+min_elt_optZ@@@@@@&optionL@@@@@@@@@@P@@'max_elt[@@@@@@@@@@@@%@Q@@+max_elt_opt\@@@@@@'@@@@@@@@@:@R@@&choose]@#@@@@@@@@@@@J@%S@@*choose_opt^@3@@@@@L+@@@@@@@@@_@:T@@$find_@9@@@@@@O@@@@@C@@@@@@@@v@QU@@(find_opt`@P@@@@@@f@@@@@^@@@@@@@@@@@@mV@@*find_firsta@@p@@@@@@@@@@@@@@@@@@~@@@@@@@@@W@@.find_first_optb@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@X@@)find_lastc@@@@@@@?@@@@@@@@@@@@@@@@@@@@@@Y@@-find_last_optd@@@@@@@^@@@@@@@@@@@@@@@@@@@@@@@@@Z@@$itere@@@@@@@$unitF@@@@@@@@@@@@@ @@@@@@@@:@[@@$foldf@@@@@@@@#acc@ .@@@@@@@@@6@@@@@@@@@@@@@@@^@9\@@&filterg@@<@@@@@@@@@@@@@V@@@@@Y@@@@@@@@}@X^@@*filter_maph@@[@@@@@b@@@@@@@@@@@y@@@@@|@@@@@@@@@{_@@)partitioni@@~@@@@@ @@@@@@@@@@@@@@@@@~@@@@@@}@@|@@{@@`@@%splitj@@@@z@@y@@@@x@@w@@@@t@>@@@u@@@@v@@s@@r@@q@@a@@(is_emptyk@@@@p@@oT@@@n@@m@@b@@,is_singletonl@@@@l@@ke@@@j@@i@@c@@#memm@@@@h@@g@@@@f@@e}@@@d@@c@@b@(@d@@%equaln@@@@a@@`@@@@_@@^@@@]@@\@@[@@@e@@'compareo@)@@@Z@@Y@0@@@X@@W@@@V@@U@@T@X@3f@@&subsetp@A@@@S@@R@H@@@Q@@P@@@O@@N@@M@p@Kg@@'for_allq@@N@@@L@@K@@@J@@I@@H@h@@@G@@F@@@E@@D@@C@@kh@@&existsr@@n@@@B@@A@@@@@@?@@>@@@@=@@<@@@;@@:@@9@@i@@'to_lists@@@@8@@7٠@@@6@@@5@@4@@j@@+to_seq_fromt@@@@3@@2@@@@1@@0&Stdlib#Seq!t@@@/@@@.@@-@@,@@l@@&to_sequ@@@@+@@*#Seq!t@@@)@@@(@@'@@m@@*to_rev_seqv@@@@&@@%3#Seq!t@@@$@@@#@@"@@n@@'add_seqw@H#Seq!t@@@!@@@ @@@@@@@@@@@@@@@@6@o@@&of_seqx@g#Seq!t@@@@@@@@*@@@@@@N@)p@@&outputy@+out_channel@@@@@@@@@@@@@@@@@@@@h@gM@@%printz@&Format)formatter@@@ @@ @\@@@ @@ @@@ @@@@@@N@@)to_string{@m@@@@@&stringQ@@@@@@@O@@'of_list|@$listKw@@@@@@@@@@@@@@@P@@#map}@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Q@@@@ͱu@@@ӱ#MapEC@#key~C;@@@AJ!t@@@;@@@@@@@T@A@!tC;!a@@A@A#Map$Makea!t@@@:I@B@@@@@@U@A@%empty !a@@@@9@ @E@@#add@@@@@8@@7@!a@ @@6@# @@@5@@4'@@@3@@2@@1@@0@+@F@@+add_to_list@"@@@/@@.@!a@ @@-@D$listK@@@,@@@+@@*O @@@)@@@(@@'@@&@@%@X@ G@@&update@O@@@$@@#@@&optionL!a@ @@@"@@!  @@@ @@@@@@@@@@@@@@@@@@@@@>H@@)singleton@@@@@@@!a@ @@@@@@@@@@@WI@@&remove@@@@@@@!a@ @@@@@@@@ @@ @@ @@tJ@@%merge@@@@@ @@ @g!a@ @@@@@@t!b@ @@@@@}!c@ @@@@@@@@@@@@"@@@@@@@@@@@@@@@@@@@@@@K@@%union@@@@@@@@!a@ @@@@@ @@@@@@@@@@@@-@@@@@@5@@@@@9 @@@@@@@@@@=@L@@(cardinal@G!a@ @@@@@ @@@@@@S@M@@(bindings@]!a@ @@@@@@Z@@@ࠠ@@@@@@@@@s@(N@@+min_binding@}!a@ @@@@@@v@@@ڠ@@@@@@@CO@@/min_binding_opt@!a@ @@@@@3@@@@ՠ@@@@@@@@@@cP@@+max_binding@!a@ @@@@@@@@@Ϡ@@@@@@@~Q@@/max_binding_opt@Ӡ!a@ @@@@@n@@@@ʠ@@@@@@@@@@R@@&choose@!a@ @@@@@@@@@Ġ@@@@@@@S@@*choose_opt@!a@ y@@@@@@ @@@@@@@@@@@@$@T@@$find@@@@@@@5!a@ p@@@@@@@@@@=@U@@(find_opt@4@@@@@@N!a@ i@@@@@ @@@@@@@@[@V@@*find_first@@V@@@@@$boolE@@@@@@@@v!a@ ^@@@@@@o@@@@@@@@@@@@]@@$mapi@@@@@^@@]@!a@ @@\!b@ @@[@@Z@@Y@@@@X@@W@@@V@@U@@T@ @ g^@@&filter@@@@@S@@R@!a@ @@Q_@@@P@@O@@N@@M@Ӡ@@@L@@Kנ@@@J@@I@@H@ @ _@@*filter_map@@@@@G@@F@!a@ @@E!b@ @@@D@@C@@B@@A@@@@@@@?@@@>@@=@@<@ @ `@@)partition@@@@@;@@:@!a@ @@9@@@8@@7@@6@@5@*@@@4@@3@2@@@1@8@@@2@@0@@/@@.@ <@ a@@%split@3@@@-@@,@M!a@ @@@+@@*@Y @@@'@@@@(@f@@@)@@&@@%@@$@ j@ b@@(is_empty@t!a@ @@@#@@"@@@!@@ @ @ 5c@@,is_singleton@!a@ @@@@@&@@@@@@ @ Kd@@#mem@@@@@@@!a@ @@@@@C@@@@@@@@ @ he@@%equal@@!a@ @@@@@]@@@@@@@@@@Ѡ@@@@@ @٠@@@ @@ q@@@ @@ @@@@@ @ f@@'compare@@!a@ @@@@@ @@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ @ g@@'for_all@@ @@@@@@!a@ @@@@@@@@@@@@0@@@@@@@@@@@@@ 8@ h@@&exists@@3@@@@@@!a@ @@@@@@@@@@@@Y@@@@@@@@@@@@@ a@ i@@'to_list@k!a@ ~@@@@@,@h@@@ޠ@@@@@@@@@ @ 6j@@&to_seq@!a@ w@@@@@&Stdlib#Seq!t@@@@ؠ@@@@@@@@@ @ \l@@*to_rev_seq@!a@ p@@@@@&#Seq!t@@@@Ҡ@@@@@@@@@ @ m@@+to_seq_from@@@@@@@۠!a@ g@@@@@P#Seq!t@@@@ʠ@@@@@@@@@@@ @ n@@'add_seq@k#Seq!t@@@@Š@!a@ [@@@@@@@@ @@@@@@@@@@@@@ @ o@@&of_seq@#Seq!t@!@@@@!a@ S@@@@@@@>@@@@@@ B@ p@@'of_list@@A@@@@!a@ L@@@@@@@^@@@@@@ b@ aV@@.disjoint_union"eq&optionL@!a@ 6@@@@@$boolE@@@@@@@@@@@@%print@ ?&Format)formatter@@@@@@'@@ :@@@@@@@@@@@@@3@@@@@@;@@@@@?@@@@@@@@@@@@ @ W@@+union_right@ !a@ ,@@@@@@Π @@@@@Ҡ@@@@@@@@ @ X@@*union_left@!a@ $@@@@@@ @@@@@@@@@@@@@ @ Y@@+union_merge@@!a@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@~@ @ Z@@&rename@(@@@}@@@|@@{@ @@@z@@y#@@@x@@w@@v@ 9@ 8[@@(map_keys@@4@@@u@@t7@@@s@@r@@q@Q!a@ @@@p@@oY@@@n@@m@@l@ ]@ \\@@$keys@g!a@ @@@k@@j #Set$Make !t@@@i@@h@ y@ x]@@$data@!a@ @@@g@@f @@@e@@d@ @ ^@@&of_set@@@@@c@@b!a@ @@a@@`@ V#Set$Make !t@@@_@@^@@@]@@\@@[@ @ _@@7transpose_keys_and_data@@@@Z@@@Y@@XȠ@@@W@@@V@@U@ @ `@@;transpose_keys_and_data_set@٠@@@T@@@S@@R #Set$Make W!t@@@Q@@@P@@O@ @ a@@%print@@ &Format)formatter@@@N@@M@!a@ @@L @@@K@@J@@I@@H@ &Format)formatter@@@G@@F@@@@E@@D @@@C@@B@@A@@@@&@%b@@@@'&v@@@ӱ#TblFC@#keyC;@@@A !t@@@ @@@@:@@@9h@A@!tC;!a@@A@A 'Hashtbl$Make !t@@@ O@B@@@T@@@Si@A@&create@3@@@ @@ (!a@@@@ @@@k@Ng@@%clear@!a@@@@@@$unitF@@@@@@@fh@@%reset@+!a@@@@@@@@@@@@@|i@@$copy@A!a@@@@@@I@@@@@@@j@@#add@W!a@@@@@@@@@@@@@@@P@@@@@@@@@@@k@@&remove@y!a@@@@@@@"@@@@@m@@@@@@@@@l@@/find_and_remove@!a@@@@@@@?@@@@@&optionL@@@@@@@@@m@@$find@!a@@@@@@@_@@@@@ @@@@@'@ n@@(find_opt@Ϡ!a@@@@@@@x@@@@@9@@@@@@@@E@(o@@(find_all@!a@@@@@@@@@@@@$listK@@@@@@@@e@Hp@@'replace@ !a@@@@@@@@@@@@@@@@@@@@@@@@@@iq@@0find_and_replace@.!a@@@@@@@@@@@@@@@@@@@@@@@@@@r@@#mem@P!a@@@@@@@@@@@@@@@@@@@@@s@@$iter@@@@@@@@!a@@@a@@@@@@@@@@@@@@@m@@@@@@@@@t@@2filter_map_inplace@@7@@@@@@!a@@@@@@@@@@@@@@@@@@@@@@@@@@@u@@$fold@@a@@@@@@!a@t@@@#acc@p@@@@@@@@@@@۠@@@@@@@@@@@@@@@E@(v@@&length@!a@l@@@@@,@@@@@@[@>w@@%stats@!a@g@@@@@T*statistics@@@@@@t@Wx@@&to_seq@!a@`@@@@@&Stdlib#Seq!t@@@@@@@@@@@@@@}y@@+to_seq_keys@B@@[@@@@@$#Seq!t@@@@@@@@@@z@@-to_seq_values@]!a@S@@@~@@}A#Seq!t @@@|@@{@@{@@'add_seq@w!a@N@@@z@@y@_#Seq!t@+@@@x@@@w@@@v@@uy@@@t@@s@@r@@|@@+replace_seq@!a@D@@@q@@p@#Seq!t@V@@@o@@@n@@@m@@l@@@k@@j@@i@%@}@@&of_seq@#Seq!t@u@@@h@!a@8@@g@@@f@@e@@@d@@c@H@+~@@'to_list@!a@3@@@b@@a @!t@@@`@@@_@@@^@@]@j@ij@@'of_list@ Ӡ@!t@@@\@!a@*@@[@@@Z@@Y&@@@X@@W@@k@@&to_map@4!a@%@@@V@@UK#Map$Make!t@@@T@@S@@l@@&of_map@`#Map$Make'!t!a@ @@@R@@Q`@@@P@@O@@m@@'memoize@n!a@@@@N@@M@@@@@L@@K@@J@@I@"@@@H@@G@@F@@E@@D@@n@@#map@!a@@@@C@@B@@ @@A!b@ @@@@@?@@@>@@=@@<@ @ o@@@@  w@@@@E@ӱD@D;@@@A@@@N@@@@@@@A@@@@@M@@L@@@@K@@J@@@I@@H@@G@2@@@@@@F@@E@@@D@@C@@@@@$@@@B@@A@+@@@@@@? @@@>@@=@@<@U@ @@@@@;@@:@A@@@9@@8@@@7@@6@@5@k@@@@@@4@@3@X@@@2@@1@@@0@@/@@.@@@@@@@@~@@@-@@,@ @@@+@@*@@@)@@(@@'@@}@{@@@@&@@%{@@@$@@#@@x@w@'@@@"@@!@/'@@@ @@x@@@@@@@@@u@s@ro@@@@@@F>@@@@@o@@@@@@@@@l@k@ji@@@@@@^V@@@@@i@@@@@@@@@h@ӱD@D;@@@Ap@@@@@@@@@@A@D;@@@A}@@@@@@@ @@@A@@@@@@@@(@@@@@@@@@@@@@@@@@@@)@@@@@@@@%@@@@@@7@@@$@@@@@@7@@@@@:@@@@@@@@L@@@E@@@@@@L@@@@@O@@@@@@@@a@@@Z@@@~@@}@a@@@|@@{d@@@z@@y@@x@v@@@o@@@w@@v@v@@@u@@t@@@s@@r@@q@@@@@@@p@@o@@@@n@@m@@@l@@k@@j@@@@@@@i@@h@@@g@@f@@@@@@@e@@dՠ@@@c@@@b@@a@@@@@@@`@@_@@@^@@]@@@@@@@\@@[Π@@@Z@@@Y@@X@@@@@@@W@@V@@@U@@T@@@@@@@S@@RǠ@@@Q@@@P@@O@@@@@@@N@@M@@@L@@K@@@@@@@J@@I @@@H@@@G@@F@ @@@ @@@E@@D@ @@@C@@B@@@A@@@@@?@5@@@"@@@>@@=@5@@@<@@;/@@@:@@@9@@8@@7@N@@@@?@@@6@@5@@@4@@3@@2@U@@@1@@0L@@@/@@.@@-@j@@@@[@@@,@@+@@@*@@)@@(@q@@@'@@&k@@@%@@@$@@#@@"@@@@@{@@@!@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@ @@ @@@ @@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@ @@@@@@@@@@@@@@@@'@@@@@*@@@@@@@@<@@@@-@@@@@@@@@@@@@C@@@@@@J@@@٠@O@@@@@@@@@@a@@@N@@@@@@a@@@@@@h@@@Ϡ@@@@Р@r@@@@@@@@@@@@@}@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@~@@@@@@@@@@@@@}@@@@@@@@,@|@{ @%@@@@@z@@@@@@@@@>@y@x@+@@@@@@>@@@@@wts:@@@@@@@@@@@Y@r@q@R@@@@@poN@@@@@@@@@m@n@m@f@@@@@lkb@@@@@@~@@}@@j@i@hgs@@@|@@@{@@z@@@@y@@x@@@w@@v@@u@@f@e@dc@@@t@@@s@@r@@@q@@p@@b@a@b`@@@o@@n@@@@m@@l_@@@k@@j@@i@@^@]@y\[@@@h@@g@@@@f@@eZ@@@d@@c@@b@@Y@X@@@@a@@`W@@@_@@^@@T@S@R@@@]@@@\@@[@@@Z@@Y@@O@N@@@@@X@@W@@@V@@U@@T@@@@S@@R@@@Q@@P@@O@@M@@@L@@ӱKD@JD;@@@AI@@@@@@@(@@@HA@GD;F@A@ABA@O@@@?>@@7@@@=A@<;@@@@@@7@6@+@@@@@@5@@@<@@@@@@@@@@@@@@@@\@1@0@@@@@@@/@@@4+9@@@@@@@@<(A@@@@@@@@@@@@@@'@&@?@@@@@~@@%"@@@}@@|&@@@{@@z@@y@c.@@@x@@wg2@@@v@@u@@t@@s@@@@f@@@r@@q@@@pz@@@o@@n@@m@@@@y@@@l@@k@@@@j@@i@@@h@@g@@f@@@ @@@@@e@@d@@@@c@@b@  @@@a@@`@@@_@@^@@]@@\@@[@"@@@Z@@Y@Ġ@@@X@@WȠ@@@V@@U@@T@@S@@@!@@@@@R@@Q@@@P@@@O@@@N@@M@@L@@K@@J@ @@@I@@H@@@@G@@F@@@E@@D@@C@@B@6@@"@@@@A@@@@@@?@@>@E@@#@@@@=@@<@@@@;@@@:@@@9@@8@^@@$@+@@@7@@6@&@@@5@@@4@@3@s@@%@@@@@2@@1ߠ@>@@@0@@@/@@@.@@-@@@&@Y@@@,@@+@T@@@*@@@)@@(@@@'@n@@@'@@&Ҡ@l@@@%@@@$@@@#@@"@@@(@@@@!@@ @@@@@@@@@@@@)@@@@@@Š@@@@@@@@@@@@@@@*@@@@@@@@@@@@@@@@@@@+@@@@@@@Ϡ@@@@@ @@@ @@ @@ @@@,@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@5@@-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\@@.@@ @@@@@@@@@@@@@7@@@@@@2@@@렠@@@@@@@@@@/@@C@@@@@@@@@@@@@Z@@@@@@X@@@ࠠ@@@@@@@@@@@@@0@@j@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@2@@@@}@@@@@@@@@@à@@@@@@@@@y@x3@@@@@@@@w@@s@@@@@@@ޠ~@@@@@~@@@@@@@@!@o@n4@@@@@@@@m@@i@@@@@@@@@@w@@@@@{@@@@@@@@C@h@g5@@@@@@@@f@@ba@@@@@@@@@@#q@@@@@'m@@@@@@@@f@]@\6@@*@@@@@@[@@W@@@@@@@@@@Ee@@@@@@Mm@@@@Ss@@@@@@@@@@@V@U7@R@@@@@@fT@@@@@@n\@@@@Pb@@@@zh@@@@@@@@@@@O@N8@M@@@~@@}I@@@|@@{@@H@G9@F@@@z@@yB@@@x@@w@@A@@:@@@@v@@u@?@@@t@@s;@@@r@@q@@p@@:@9;@@8@@o@<@@n4@@@m@@l@@k@@j@ɠF@@@i@@h@ѠN@@@g@@f3@@@e@@d@@c@@b@@2@1<@@0@@a@4@@`,@@@_@@^@@]@@\@>@@@[@@Z@F@@@Y@@X+@@@W@@V@@U@@T@9@*@)=@@@@@S@@R@(@@Q$@@@P@@O@@N@@M@2@@@L@@K#@@@J@@I@@H@Z@"@!>@@@@@G@@F@ @@E@@@D@@C@@B@@A@9*@@@@@@?@@@>@@=@@<@{@@?@H@@@;@@:@F@@@9@%@@8@@@7@@6@@@@@a@@@5@@4   @a@@@3@ @@2@@@1@@0@@@A@|@@@/@@.(@|@@@-@@@,@@@+@@*@@@B@@@@)@@(@@@@'@@&J@@@@%@ @@$@@@#@@"@@!@@@C@a@@@@ @@@@@@@@@̠@@@@@Р@@@@@@@@@@D@@@@@@@@@@@@@@@@@@@*@@E@@@@@@@@@@@@@@@@ @@ @C@@Fݠ@@@ @@@ @@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@;@@@@@@C @@@@@G @@@@@@@@@@@@@@G@S@@@@@@[@@@@@_@@@@@@@@@@H@k@@@@@@s@@@@@w@@@@@@@@@@I@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@J@@@@@@@@@@@@@@@@@@@@@@@@@K@@@@@@@@@@@@@@@Π@@@@@Ҡ@@@@@@@@@@L@ޠ@@@@@ @@@@@@$@@M@@@@@@@@@@@@4@@N@@@@@@@@@@@@ @@@@@@@@@@@@@R@@O@@@@@@@@@&@@@@@@@@@h@@P@5+@@@@@@@@<' @@@@@@@@@@@Q@@9@@@@@@@@@@@@@@@@@@I@@@@@@l@@@@@@@@@@@@@@@@@@@@@ӱD@RD;@@@A /@@@ h@@@@@@@A@SD;@A@Aq}| ={@@@ gzy@@@@@xA@wT@v@@@ f@@ eu@@@ d@@ c@@q@pU@ o@@@ b@@ ak@@@ `@@ _@@h@gV@f@@@ ^@@ ]b@@@ \@@ [@@a@`W@+_@@@ Z@@ Y/c@@@ X@@ W@ @[@ZX@;Y@@@ V@@ U@h@@@ T@@ S@f@@ RU@@@ Q@@ P@@ O@@ N@%@T@SY@VR@@@ M@@ L@@@@ K@@ JN@@@ I@@ H@@ G@;@M@LZ@lK@@@ F@@ E@1@@@ D@@ CGV@@@ B@@ A@@ @@R@D@C[@B@@@ ?@@ >@H@@@ =@@ <J@@ ;@@ :@e@>@=\@<@@@ 9@@ 8@[@@@ 7@@ 68G@@@ 5@@ 4@@ 3@|@7@6]@5@@@ 2@@ 1@r@@@ 0@@ /1@@@@ .@@ -@@ ,@@.@-^@Ġ,@@@ +@@ *@@@@ )@@ (@8@@ '(@@@ &@@ %@@ $@@ #@@'@&_@ޠ%@@@ "@@ !@@@@ @@ @1@@ !4@@@ @@ @@ @@ @@ @`@@@@ @@ @@@@ @@ @@@ @@ @@ @@@a@@@@@ @@ @@@ @@@ @@ @@ @@ @!!@@@ @@ @@@ @@ @@ @@@b@@@@@ @@ @@@  @@@ @@ @@ @@ @C@@@@@ @@@@@@@@!@ @c@@@@@@@@@@@@@@@@@@@@@@e@@@@@@@@@@@@@@@D@@d@u@@@@@@@@@@@S@@e@@@@@@@@@@@@c@@f@@@@@@@^@@@⠠@@@@@@@@@~@@g@@@@@@ߠu@@@@@@@@@@@h@Ġ@@@@@נ@@@@@@@@i@֠@@@@@@/Ϡ@@@@Ӡ@@@@@@@@@@@@@@@@@@j@@@@@@@QƠ@@@@ʠ@@@@@@@@@@@@@@@@@@k@k@@@@à@@@@@@@@)@@@@@@ @@l@5@@@@@@ @@@@@@@@@@@@ @@m@@ @@@@@@@@@@@]@@@@@@ 8@@n@i@@@@@ @@@@@@ L@@o@  @@@@@@@@@@@ `@@p@@@@@@@@Z@@@@@@@@@@a@@@@@@@@@@@@ ~@@q@@@@@@@@@@@@@@@@@@@@@@ @@@@ @@@$I   @@ ϰ @@#"A@"2" @"!@!!@!|!J@!C!.@!' @&  ՠ  @3$$$$$$$$@ð @A@@@@on@[Z@@@  @DC,+   @  A@  A@  @  @  @  @  @ w v@ d c@ Q P@ > =@ 2 1@ " !@  @  @  @  @  @  @  @  @  @ l k@ R Q@ 4 3@  @  @  @  @  @  @ v u@ j i@ W V@ D C@ 1 0@  @  @  @  @  @  @  @  @ r q@ ^ ]@ I H@ = <@ - ,@@@!,_ @  A@  A@  @  @  @  @  @  @ n m@ 9 8@  @@@@@@@@ji@YX@DC@#"@@@@@xw@ba@ED@%$@@@@@@@cb@?>@ @@@@@@wv@^]@GF@@@@@@@ts@fe@JI@65@@@@!{@A@A@@@@@@@yx@dc@SR@>=@)(@@@@@@@wv@ih@PO@=<@-,@  @@@@@@@dc@@@!@AL%%y " /%J  @@)ocaml.doc& l A [Uid.t] is associated to every declaration in signatures and implementations. They uniquely identify bindings in the program. When associated with these bindings' locations they are useful to external tools when trying to jump to an identifier's declaration or definition. They are stored to that effect in the [uid_to_decl] table of cmt files. &t  &x  !@@@@@@@& y " "@&@2Sig_component_kindE&L  &L @&/a@@БA+!tsF&%M&&M@@;@@%Valuet@@&/N"&&0N"-@@&HV@$Typeu@@&8O.2&9O.8@@&QW@+Constructorv@@&AP9=&BP9J@@&ZX@%Labelw@@&JQKO&KQKV@@&cY@&Modulex@@&SRW[&TRWc@@&lZ@+Module_typey@@&\Sdh&]Sdu@@&u[@5Extension_constructorz@@&eTvz&fTv@@&~\@%Class{@@&nU&oU@@&]@*Class_type|@@&wV&xV@@&^@@@A@@@@@&{M@@A@&U@@#UU&N"(S@R@@@V@#RR&O.4P@O@@@S@#OO&P9?M@L@@@P@#LL&QKQJ@I@@@M@#II&RW]G@F@@@J@#FF&SdjD@C@@@G@#CC&Tv|A@@@@@D@#@@&U>@=@@@A@#==&V;@:@@@>@@A@:@@3&&&&&&&&@&%@%% A@$@$@$#@##@##X@#Q#<@#5# @@A@@@~@lk@XW@@@""=@@CB@-,@ @  @@@A@A@@@@@@@ml@ZY@GF@;:@+*@@@@@@@@@@ut@[Z@=<@#"@@  @  @  @  @  ~@ s r@ ` _@ M L@ : 9@ ' &@  @  @  @  @  @  @  @ { z@ g f@ R Q@ F E@ 6 5@@@#5h@@ @  A@  A@  @  @  @  @  @  @ y x@ D C@  @  @  @  @  @  @  @  @ u t@ d c@ O N@ . -@  @  @  @  @  @ m l@ P O@ 0 /@  @@@@@@nm@JI@+*@  @@@@@@ih@RQ@@@@@@@~@qp@UT@A@@)(@@@#@@@A@A@@@@@@@@qp@`_@KJ@65@@@@@@@@vu@]\@JI@:9@@@@@@@@qp@@@#@@@ (@@@@@@&o@A@)to_string}(X(X@б@г!t(!X("X@@ @@@ o3(#("("(#(#(#(#(#@s@A@@г'&string(0X(1X@@ @@@ p@@@@@ q@@ r @@@(=X @@(U_@@@@3can_appear_in_types~(H[!(I[4@б@г.!t(S[7(T[8@@ @@@ s3(U(T(T(U(U(U(U(U@3H@A@@г($bool(b[<(c[@@@ @@@ t@@@@@ u@@ v @@@(o[ @n D Whether the name of a component of that kind can appear in a type. (|Z(}Z@@@@@@@(`@@@(@@@@@@3@lfA@}T@M$@@3((((((((@:O&@A 3((((((((@@A(L (\AD@@@(L  @@$ItemG(b>E(b>I@(r@@БA+!tH(cPW(cPX@@;@@@A@(@@@ x@!t@@@ @@ @@@@(cPR(cPx@@@@(b@@@AВ@г&string(cP[(cPa@@3((((((((@(@A@@x@@@M5;@@@A=@@@ @ w@@@@%@@@"@A@@@г.2Sig_component_kind(cPd(cPv@5(cPw3@4@@<%5@@@G&)6@@8@@3((((((((@&@A98@$name) dy) dy@б@гb!t)dy)dy@@ @@@ 3))))))))@Amg@A@@г(점&string)%dy)&dy@@ @@@ @@@@@ @@  @@@)2dy{ @@)Jc@@@@$kind)=e)>e@б@г!t)He)Ie@@ @@@ 3)J)I)I)J)J)J)J)J@3H@A@@гC!t2Sig_component_kind)[e)\e@ )_e)`e@@@@@@  @@@ @@ @@ # @@@)me@@)d@@@@#$make)xg)yg@б@г)J&string)g)g@@ @@@ 3))))))))@<Q@A@@б@г!t2Sig_component_kind)g)g@ )g)g@@@@@@  @@г!t)g)g@@ @@@ '@@@@@ @@ , @@@4@@  @@ 17@@@)g@@)e@@@@7%value)i)i@б@г&!t%Ident)i)i@ )i)i@@@@@@ 3))))))))@Yn(@A @@г6!t)i)i@@ @@@ @@@@@ @@  @@@)i @@*f@@@@%type_*j *j@б@г'!t%Ident*j*j@ *j*j@@@@@@ 3********@<Z(@A @@гq!t*%j *&j!@@ @@@ @@@@@ @@  @@@*2j  @@*Jg@@@@&constr*=k"(*>k".@б@г'>!t%Ident*Lk"1*Mk"6@ *Pk"7*Qk"8@@@@@@ 3*S*R*R*S*S*S*S*S@<Z(@A @@г!t*`k"<*ak"=@@ @@@ @@@@@ @@  @@@*mk"$ @@*h@@@@%label*xl>D*yl>I@б@г'y!t%Ident*l>L*l>Q@ *l>R*l>S@@@@@@ 3********@<Z(@A @@г砐!t*l>W*l>X@@ @@@ @@@@@ @@  @@@*l>@ @@*i@@@@'module_*mY_*mYf@б@г'!t%Ident*mYi*mYn@ *mYo*mYp@@@@@@ 3********@<Z(@A @@г"!t*mYt*mYu@@ @@@ @@@@@ @@  @@@*mY[ @@*j@@@@+module_type*nv|*nv@б@г'!t%Ident*nv*nv@ +nv+nv@@@@@@ 3++++++++@<Z(@A @@г]!t+nv+nv@@ @@@ @@@@@ @@  @@@+nvx @@+6k@@@@5extension_constructor+)o+*o@б@г(*!t%Ident+8o+9o@ +<o+=o@@@@@@ 3+?+>+>+?+?+?+?+?@<Z(@A @@г!t+Lo+Mo@@ @@@ @@@@@ @@  @@@+Yo @@+ql@@@@&class_+dp+ep@б@г(e!t%Ident+sp+tp@ +wp+xp@@@@@@ 3+z+y+y+z+z+z+z+z@<Z(@A @@гӠ!t+p+p@@ @@@ @@@@@ @@  @@@+p @@+m@@@@*class_type+q+q@б@г(!t%Ident+q+q@ +q+q@@@@@@ 3++++++++@<Z(@A @@г!t+q+q@@ @@@ @@@@@ @@  @@@+q @@+n@@@@%print2+s+s @б@г*S&Format)formatter+s +s@ +s+s@@@@@@*3++++++++@<Z(@A @@б@гK!t+s!,s"@@ @@@*@@г+$unit, s&, s*@@ @@@*@@@@@*@@*# @@@+@@* @@*(3@@@,s@@,6o@@@@.#MapI,+u,5,,u,8@,Dq@@УР*#Map!S,;u,;,<u,>@ ,?u,?,@u,@@@3,@,?,?,@,@,@,@,@@Qo)@A @@#key<@#key,Ou,K,Pu,N@+ @;@@@A@@@,U@@@@,\u,F,]u,R@@@@,up@@@Aг !t,fu,Q @@$ @@ @@"kJ;@@@A@@@/i@@@@@@@A@!tlJ;!a@,T@A@A@I@B@@@'map.mliI V ZI V e@@@@+Stdlib__MapD@A@%emptym!a@,S@@@/h@L  L  @@E@@#addn@8@@@/g@@/f@!a@,L@@/e@& @@@/d@@/c*@@@/b@@/a@@/`@@/_@9O  :O  @@8F@@+add_to_listo@%@@@/^@@/]@!a@,A@@/\@J$listK@@@/[@@@/Z@@/YU @@@/X@@@/W@@/V@@/U@@/T@iX  jX  @@hG@@&updatep@U@@@/S@@/R@@&optionL!a@,2@@@/Q@@/P  @@@/O@@/N@@/M@@@@/L@@/K@@@/J@@/I@@/H@@/G@^^@@H@@)singletonq@@@@/F@@/E@!a@,*@@/D@@@/C@@/B@@/A@jW[jW{@@I@@&remover@@@@/@@@/?@ !a@,"@@@/>@@/=ʠ@@@/<@@/;@@/:@oo@@J@@%merges@@@@@/9@@/8@p!a@,@@@/7@@/6@}!b@,@@@/5@@/4!c@, @@@/3@@/2@@/1@@/0@@//@ "@@@/.@@/-@@@@/,@@/+@@@/*@@/)@@/(@@/'@$vY]%x@@#K@@%uniont@@@@@/&@@/%@!a@+@@/$@@@/#à @@@/"@@/!@@/ @@/@@/@B@@@/@@/@J@@@/@@/N @@@/@@/@@/@@/@]fj^f@@\L@@(cardinalu@_!a@+@@@/@@/#intA@@@/@@/@xy@@wM@@(bindingsv@z!a@+@@@/@@/5@t@@@/@@@/@@@/ @@/ @8<8a@@N@@+min_bindingw@!a@+@@@/ @@/ @@@@/ @@@/@@/@bfb@@O@@/min_binding_optx@!a@+@@@/@@/M@@@@/@@@/@@@/@@/@JNJ|@@P@@+max_bindingy@ޠ!a@+@@@/@@.@@@@.@@@.@@.@484[@@Q@@/max_binding_optz@!a@+@@@.@@.@@@@.@@@.@@@.@@.@ @@R@@&choose{@!a@+@@@.@@.@@@@.@@@.@@.@;<@@:S@@*choose_opt|@=!a@+@@@.@@.Ϡ@7@@@.@@@.@@@.@@.@^_@@]T@@$find}@J@@@.@@.@g!a@+@@@.@@.@@.@@.@z{@@yU@@(find_opt~@f@@@.@@.@!a@+@@@.@@. @@@.@@.@@.@IMIs@@V@@*find_first@@@@@.@@.$boolE@@@.@@.@@.@!a@+@@@.@@.@@@@.֠@@@.@@.@@.@    D@@W@@.find_first_opt@@@@@.@@./@@@.@@.@@.@۠!a@+@@@.@@.m@@@@.ˠ@@@.@@@.@@.@@.@"*"."*"l@@X@@)find_last@@@@@.@@.a@@@.@@.@@.@ !a@+@@@.@@.@@@@.@@@.@@.@@.@)#_#c*#_#@@(Y@@-find_last_opt@@@@@.@@.@@@.@@.@@.@:!a@+@@@.@@.̠@4@@@.@@@.@@@.@@.@@.@[$y$}\$y$@@ZZ@@$iter@@K@@@.@@.@!a@+{@@.$unitF@@@.@@.@@.@@.@v@@@.@@.@@@.@@.@@.@%%%& @@[@@$fold@@y@@@.@@.@!a@+m@@.@#acc@+i@@.@@.@@.@@.@@.@@@@.@@.@@@.@@.@@.@@.@'%')'3'l@@\@@#map@@!a@+b@@.!b@+_@@.@@.@ˠ@@@.@@.Ϡ@@@.@@.@@.@(e(i(e(@@]@@$mapi@@@@@.@@.@!a@+U@@.!b@+R@@.@@.@@.@@@@.@@.@@@.@@.@@.@ )) ))@@ ^@@&filter@@@@@.@@.@!a@+E@@.w@@@.@@.~@@.}@@.|@#@@@.{@@.z'@@@.y@@.x@@.w@6**7**@@5_@@*filter_map@@&@@@.v@@.u@!a@+:@@.tѠ!b@+7@@@.s@@.r@@.q@@.p@T@@@.o@@.nX@@@.m@@.l@@.k@g ,,h ,,?@@f`@@)partition@@W@@@.j@@.i@!a@+)@@.h@@@.g@@.f@@.e@@.d@@@@.c@@.b@@@@.`@@@@.a@@._@@.^@@.]@.../%@@a@@%split@@@@.\@@.[@!a@+@@@.Z@@.Y@ @@@.V@B@@@.W@@@@.X@@.U@@.T@@.S@$0'0+$0'0\@@b@@(is_empty@Р!a@+@@@.R@@.Q4@@@.P@@.O@022!022;@@c@@,is_singleton@!a@+@@@.N@@.MM@@@.L@@.K@32l2p32l2@@d@@#mem@@@@.J@@.I@ !a@+ @@@.H@@.Gm@@@.F@@.E@@.D@ 822!823@@e@@%equal@@!a@*@@.C@@@.B@@@.A@@.@@@.?@@.>@6@@@.=@@.<@>@@@.;@@.:@@@.9@@.8@@.7@@.6@Q<3j3nR<3j3@@Pf@@'compare@@!a@*@@.5@@@.4@@@.3@@.2@@.1@@.0@g@@@./@@..@o@@@.-@@., @@@.+@@.*@@.)@@.(@B44B44@@g@@'for_all@@r@@@.'@@.&@!a@*@@.%@@@.$@@.#@@."@@.!@@@@. @@.@@@.@@.@@.@F5r5vF5r5@@h@@&exists@@@@@.@@.@!a@*@@.@@@.@@.@@.@@.@Ǡ@@@.@@.'@@@.@@.@@.@K66"K66Q@@i@@'to_list@ܠ!a@*@@@.@@.@@@@. @@@. @@@. @@. @R66R67@@j@@'of_list@@@@@. @!a@*@@.@@@.@@.@@@.@@.@ V7]7a!V7]7@@k@@&to_seq@"!a@*@@@.@@.&Stdlib#Seq!t@"@@@.@@@.@@@-@@-@I\888<J\888a@@Hl@@*to_rev_seq@K!a@*@@@-@@-)#Seq!t@H@@@-@@@-@@@-@@-@o`88p`88@@nm@@+to_seq_from@[@@@-@@-@x!a@*@@@-@@-V#Seq!t@u@@@-@@@-@@@-@@-@@-@d9;9?d9;9p@@n@@'add_seq@t#Seq!t@@@@-@!a@*@@-@@@-@@-@ @@@-@@-@@@-@@-@@-@i: :i: :=@@o@@&of_seq@#Seq!t@@@@-堠@!a@*@@-@@@-@@-@@@-@@-@m::m::@@p@@@09@@@3uu,.@3@@  A@ t K@ D @  @  @  S@ L @ @@o@h6@/@@w@o@.@"i@@@333333333@Tr@10A@*(A@@ @@@@lj@NL@@@@@xv@WU@;9@@@@@@wu@GE@@@@@om@EC@@@@@rp@[Y@=;@ @@@@jh@IG@" @@@@@@@A333333333@ @A3b>L3vSV@@4 Shape's items are elements of a structure or, in the case of constructors and labels, elements of a record or variants definition seen as a structure. These structures model module components and nested types' constructors and labels. 4^FF4 a1=@@@@@@@4 b>>@@A+#varK4xX]4xX`@@;@@ bA1!t@@@/k@@@@4!xXX4"xXj@@@@4:s@@@Aг %Ident4-xXc4.xXh@41xXi@@@3404/4/4040404040@ Z @  A@ 5 @  @  @  M@ F @  @  @  i@ b 0@ )@@@~8@0@A@A@@@@vt@DB@*(@  @@@sq@RP@64@@@@@@@b`@53@@@@~|@PN@-+@@@@vt@GE@0.@@@@@sq@IG@(&@@@@@ec@@@@@@@ @@@@@@ ;@@@A@@@/p@/j@@@@@@@@A@@@@344444444@@A@A+!tL4ykp4ykq@@;@@#uid@@463L!t@@@/@@@/4ykv4yk@@5w@$desc@@$descL@@@/4yk4yk@@5x@,approximated@@4@@@/5yk5yk@@5y@@@A@@@@@5ykk5yk@@@@5t@@#22&5 yky@%@@Ш@г5&option5yk5yk@г:#Uid5!yk{5"yk~@A5%yk5&yk@@@I35%5$5$5%5%5%5%5%@];@@@A@@@@@*@@@'=;@@@A@@@@@51z52J]@@@@5Ju@@A@@@Z @@]@@/@R@#NNG5<yk@F@@Ш@гQ$desc5Eyk5Fyk@@Y@@\@@/"@V@#RRM5Nyk@L@@Ш@гU$bool5WykV@@\0W@@_@@/3@[@@A@W@+ll5_z5`z@@;@@#VarZ@@@/@@5n{5o{@@5z@#Absh@@@/@@@/@@5|5|@@5{@#App@@@/@@@/@@5}5}@@5|@&Struct #Map!t@@@1@@@1@@5~5~@@5}@%Alias@@@1@@55@@5~@$Leaf@@55@@5@$Proj@@@1 4!t@@@1@@551@@5@@)Comp_unit5@@@1@@52452I@@5A@%Error5@@@1@@5JL@@6 B@@@A@@@@@@@@@#5{5{@@г#var6{@@ݰ@@@@@#6 |6 |@@г#var6|6|@@@@г!t6|@@@@@@@#6$}6%}@@г!t6.}6/}@@@@г!t68}@@@@@@@#6>~6?~@@г$Item6L~6M~@6P~6Q~@@6U~@ @г!t6^~6_~@@8@@@9@@@@@#6f6g @@г!t6p@@I@@@@@#6v@@@@@#6|6}#@@г!t6'6(@@`@@г$Item6+6/@60@@@p@@@@@#62662?@@г&string62C@@@@@@@#6JN6JS@@гà&string6JW@@@@@@@@A@@@366666666@@A@%print6_c6_h@б@г5<&Format)formatter6_k6_q@ 6_r6_{@@@@@@1366666666@~ @A @@б@г!t6_6_@@ @@@1@@г6$unit6_6_@@ @@@1@@@@@1@@1$ @@@,@@1 @@1)4@@@7__@@7 C@@@@/2strip_head_aliases77@б@гK!t77@@ @@@137 777 7 7 7 7 @Hf@A@@гZ!t7-7.@@ @@@1@@@@@1@@1 @@@7: @@7RD@@@@9for_unnamed_functor_param7E7F@г8#var7N7O@@ @@@137P7O7O7P7P7P7P7P@1F@A@@@7X @@7pE@@ @@)fresh_var7c7d@б$nameг77&string7p7q@@ @@@137r7q7q7r7r7r7r7r@#6!@A@@б@г5!t#Uid7 7 @ 7 7@@@@@@1 @@В@г#var77@@ @@@1+@@@гנ!t77@@ @@@1:@@@@@ @@1A @@@/@@1 @@1F7@@W7R@@@1@@1@@1P7@@ @7@@7F@@!@@W#var77"@б@г6E!t#Uid7%7(@ 7)7*@@@@@@1377777777@y(@A @@б@г4!t%Ident7.73@ 8485@@@@@@1 @@г;M@ 8A;N8B;O@@@@@@138D8C8C8D8D8D8D8D@[y*@A @@б@г=#var8S;S8T;V@@ @@@1@@б@г!t8b;Z8c;[@@ @@@1 @@г!t8o;_8p;`@@ @@@1-@@@@@1@@12 @@@)@@1 @@17,@@QàB@@@1@@1 @@1@8;E@@ @8;;@@8H@@@@G#app8ae8ah@б#uidг7 !t#Uid8ap8as@ 8at8au@@@@@@1388888888@k*@A @@б@гꠐ!t8ay8az@@ @@@1@@б#argг!t8a8a@@ @@@1"@@г!t8a8a@@ @@@1/@@@@1@@148a~ @@@,@@1 @@1:/@@T0E@@@1@@1 @@1C8ak@@ @8aa@@9I@@@@J#str99@б#uidг7v!t#Uid99@ 99@@@@@@1399999999@n*@A @@б@г#Map!t$Item9293@ 9697@@9;9<@ @гs!t9F9G@@ @@@1-@@@)@@@12 @@г!t9X9Y@@ @@@1?@@@@@1@@1D @@^O@@@2@@2 @@2M9l@@ @9o@@9J@@@@T%alias9z9{@б#uidг7!t#Uid99@ 99@@@@@@2399999999@x*@A @@б@гΠ!t99@@ @@@2@@г۠!t99@@ @@@2@@@@@2@@2# @@=.@@@2 @@2  @@2 ,9@@ @9@@9K@@@@3$proj99@б#uidг8C!t#Uid99@ 99@@@@@@2 399999999@Ww*@A @@б@г$!t99@@ @@@2@@б@гc!t$Item: : @ ::@@@@@@2) @@гI!t::@@ @@@26@@@@@2@@2; @@@2@@2 @@2@5@@ZpK@@@2@@2 @@2I:5@@ @:8@@:PL@@@@P$leaf:C:D@б@г8!t#Uid:R :S @ :V :W@@@@@@23:Y:X:X:Y:Y:Y:Y:Y@r(@A @@г!t:f:g@@ @@@2@@@@@2@@2 @@@:s @@:M@@@@-decompose_abs:~:&@б@г!t:):*@@ @@@23::::::::@3Q@A@@г9점&option:8:>@В@г#var:/:2@@ @@@2@@@г⠐!t:5:6@@ @@@2,@@@@@ @@2 3 @@@1 @@@2"8:./@@@A@@2# @@2$>D4@@@:7@@:N@@9@@D3for_persistent_unit:@D:@W@б@г:&string:@Z:@`@@ @@@2%3::::::::@]r@A@@г!!t:@d:@e@@ @@@2&@@@@@2'@@2( @@@;@@ @@;O@@@@/leaf_for_unpack; fj; fy@гB!t;f|;f}@@ @@@2)3;;;;;;;;@1F@A@@@;ff @@;7P@@ @@#MapM;,;-@;Eg@@БA+%shapeN;;;<@@;@@As@@@2+@@@@;D;E@@@@;]Q@@@Aг !t;N @@3;L;K;K;L;L;L;L;L@7J5;@@@A#@@@20@2*@@@@@@@@A@@@@3;Y;X;X;Y;Y;Y;Y;Y@ @A@@+!tO;g;h@@;@@A#Map!t@@@22@@@24@@@@;y;z@@@@;R@@@Aг$Item;;@;;@@;@ @г !t;;@@(3;;;;;;;;@Lf`@A@@@3%@@'@@'&@%empty;;@гJ!t;;@@ @@@2>3;;;;;;;;@UO@A@@@; @@;S@@ @@#add;;@б@гj!t;;@@ @@@2?3;;;;;;;;@!4@A@@б@г?!t$Item;;@ ;;@@@@@@2@ @@б@г%shape;;@@ @@@2A)@@г!t<<@@ @@@2B6@@@@@2C@@2D; @@@)@@2E @@2F@1@@@H@@2G @@2HEK@@@<@@<6T@@@@K)add_value<)<*@б@г͠!t<4 <5 @@ @@@2I3<6<5<5<6<6<6<6<6@dy@A@@б@г9;!t%Ident@@ @@@2S3<<<<<<<<@m@A@@б@г9!t%Ident<&B<&G@ <&H<&I@@@@@@2T @@б@г%shape<&M<&R@@ @@@2U)@@гo!t<&V<&W@@ @@@2V6@@@@@2W@@2X; @@@)@@2Y @@2Z@1@@@H@@2[ @@2\EK@@@<&(@@=V@@@@K(add_type<Y_<Yg@б@г!t=Yj=Yk@@ @@@2]3========@dy@A@@б@г: !t%Ident=Yo=Yt@ =Yu=Yv@@@@@@2^ @@б@г%shape=,Yz=-Y@@ @@@2_)@@гҠ!t=9Y=:Y@@ @@@2`6@@@@@2a@@2b; @@@)@@2c @@2d@1@@@H@@2e @@2fEK@@@=PY[@@=hW@@@@K-add_type_proj=[=\@б@г!t=f=g@@ @@@2g3=h=g=g=h=h=h=h=h@dy@A@@б@г:m!t%Ident={=|@ ==@@@@@@2h @@б@гT%shape==@@ @@@2i)@@г5!t==@@ @@@2j6@@@@@2k@@2l; @@@)@@2m @@2n@1@@@H@@2o @@2pEK@@@=@@=X@@@@K*add_constr==@б@гb!t==@@ @@@2q3========@dy@A@@б@г:!t%Ident==@ ==@@@@@@2r @@б@г%shape==@@ @@@2s)@@г!t=>@@ @@@2t6@@@@@2u@@2v; @@@)@@2w @@2x@1@@@H@@2y @@2zEK@@@>@@>.Y@@@@K/add_constr_proj>!>"@б@гŠ!t>,>-@@ @@@2{3>.>->->.>.>.>.>.@dy@A@@б@г;3!t%Ident>A>B@ >E>F @@@@@@2| @@б@г%shape>U >V@@ @@@2})@@г!t>b>c@@ @@@2~6@@@@@2@@2; @@@)@@2 @@2@1@@@H@@2 @@2EK@@@>y@@>Z@@@@K)add_label >>(@б@г(!t>+>,@@ @@@23>>>>>>>>@dy@A@@б@г;!t%Ident>0>5@ >6>7@@@@@@2 @@б@г=!t#Uid>;>>@ >?>@@@@@@@22 @@гg!t>D>E@@ @@@2?@@@@@2@@2D @@@2@@2 @@2I:@@@Q@@2 @@2NT@@@>@@>[@@@@T.add_label_projà>FL>FZ@б@г!t>F]>F^@@ @@@23>>>>>>>>@m@A@@б@г<!t%Ident?Fb?Fg@ ?Fh?Fi@@@@@@2 @@б@г預%shape?$Fm?%Fr@@ @@@2)@@гʠ!t?1Fv?2Fw@@ @@@26@@@@@2@@2; @@@)@@2 @@2@1@@@H@@2 @@2EK@@@?HFH@@?`\@@@@K*add_moduleĠ?Sy?Ty@б@г!t?^y?_y@@ @@@23?`?_?_?`?`?`?`?`@dy@A@@б@г@@@@@@2 @@б@г>!t#Uid@Q@R@ @U@V@@@@@@22 @@г!t@c @d @@ @@@2?@@@@@2@@2D @@@2@@2 @@2I:@@@Q@@2 @@2NT@@@@z@@@_@@@@T4add_module_type_projǠ@@(@б@г)!t@+@,@@ @@@23@@@@@@@@@m@A@@б@г=!t%Ident@0@5@ @6@7@@@@@@2 @@б@г~%shape@;@@@@ @@@2)@@г_!t@D@E@@ @@@26@@@@@2@@2; @@@)@@2 @@2@1@@@H@@2 @@2EK@@@@@@@`@@@@K+add_extconsȠ@GM@GX@б@г!t@G[@G\@@ @@@23@@@@@@@@@dy@A@@б@г=!t%IdentAG`A Ge@ A GfA Gg@@@@@@2 @@б@г᠐%shapeAGkAGp@@ @@@2)@@г !tA)GtA*Gu@@ @@@26@@@@@2@@2; @@@)@@2 @@2@1@@@H@@2 @@2EK@@@A@GI@@AXa@@@@K0add_extcons_projɠAKv|ALv@б@г!tAVvAWv@@ @@@23AXAWAWAXAXAXAXAX@dy@A@@б@г>]!t%IdentAkvAlv@ AovApv@@@@@@2 @@б@гD%shapeAvAv@@ @@@2)@@г%!tAvAv@@ @@@26@@@@@2@@2; @@@)@@2 @@2@1@@@H@@2 @@2EK@@@Avx@@Ab@@@@K)add_classʠAA@б@гR!tAA@@ @@@23AAAAAAAA@dy@A@@б@г>!t%IdentAA@ AA@@@@@@2 @@б@г@H!t#UidAA@ AA@@@@@@22 @@г!tAA@@ @@@2?@@@@@2@@2D @@@2@@2 @@2I:@@@Q@@2 @@2NT@@@B@@B'c@@@@T.add_class_projˠBB@б@г!tB%B&@@ @@@23B'B&B&B'B'B'B'B'@m@A@@б@г?,!t%IdentB:B;@ B>B?@@@@@@2 @@б@г%shapeBNBO@@ @@@2)@@г!tB[B\ @@ @@@26@@@@@2@@2; @@@)@@2 @@2@1@@@H@@2 @@2EK@@@Br@@Bd@@@@K.add_class_type̠B} B~ @б@г!!tB "B #@@ @@@23BBBBBBBB@dy@A@@б@г?!t%IdentB 'B ,@ B -B .@@@@@@2 @@б@гA!t#UidB 2B 5@ B 6B 7@@@@@@22 @@г`!tB ;B <@@ @@@2?@@@@@2@@2D @@@2@@2 @@2I:@@@Q@@2 @@2NT@@@B  @@Be@@@@T3add_class_type_proj͠B=CB=V@б@г!tB=YB=Z@@ @@@23BBBBBBBB@m@A@@б@г?!t%IdentC =^C =c@ C =dC=e@@@@@@2 @@б@г⠐%shapeC=iC=n@@ @@@2)@@гà!tC*=rC+=s@@ @@@26@@@@@2@@2; @@@)@@2 @@2@1@@@H@@2 @@2EK@@@CA=?@@CYf@@@@K@ A@@@@0@)@e@^@@B@;@w@p@@T@M@@(@!@]@V@@1@@3CmClClCmCmCmCmCm@x3@A/3CpCoCoCpCpCpCpCp@#@ACuCvtw@@@Cx@@)dummy_modϠCy}Cy@г!tCyCy@@ @@@23CCCCCCCC@Ak@_YA@5/@@@@y@@T@M@@1@*@f@_@@:@3@x@q@@L@E@@@@I@A65@@5@Cyy8@@Ch@@:@@6'of_pathCC@б*find_shapeб@г!t2Sig_component_kindCC@ CC@@@@@@23CCCCCCCC@\o,@A @@б@г@!t%IdentCC@ CD@@@@@@2 @@г:!tD D@@ @@@3'@@@@@3@@3, @@@4@@3 @@31<@@б)namespaceг!t2Sig_component_kindD,D-@ D0D1@@@@@@3K @@б@г$Path!t$PathDFDG@ DJDK@@@@@@3e @@г!tDX DY @@ @@@3r@@@@@3@@3w @@F4@@3 @@3|Dh@@U@@3 @@3Dn@@@Dq@p  This function returns the shape corresponding to a given path. It requires a callback to find shapes in the environment. It is generally more useful to rely directly on the [Env.shape_of_path] function to get the shape associated with a given path. D~Ds@@@@@@@Di@@)@D@@@@@@/set_uid_if_noneDD!@б@г͠!tD$D%@@ @@@33DDDDDDDD@8@A@@б@гC!t#UidD)D,@ D-D.@@@@@@3 @@г!tD2D3@@ @@@3'@@@@@3@@3, @@@4@@3 @@317@@@D@@Dj@@@@7@CG@CA@@@O@J@@D@1>@@A@A@B@. @  @  @  ,@ % @  n@ g @  @  :@ 3 @  @  6@ / @  @ @@ @@K@D@9@@3E E E E E E E E @l;@A@ H************************************************************************EA@@EA@L@ H EBMMEBM@ H OCaml E"CE#C@ H E(DE)D3@ I Ulysse Gérard, Thomas Refis, Tarides E.E44E/E4@ H E4FE5F@ H Copyright 2021 Institut National de Recherche en Informatique et E:GE;G@ H en Automatique. E@HEAHh@ H EFIiiEGIi@ H All rights reserved. This file is distributed under the terms of ELJEMJ@ H the GNU Lesser General Public License version 2.1, with the ERKESKO@ H special exception on linking described in the file LICENSE. EXLPPEYLP@ H E^ME_M@ H************************************************************************EdNEeN6@ r* Shapes are an abstract representation of modules' implementations which allow the tracking of definitions through functor applications and other module-level operations. The Shape of a compilation unit is elaborated during typing, partially reduced (without loading external shapes) and written to the [cmt] file. External tools can retrieve the definition of any value (or type, or module, etc) by following this procedure: - Build the Shape corresponding to the value's path: [let shape = Env.shape_of_path ~namespace env path] - Instantiate the [Shape_reduce.Make] functor with a way to load shapes from external units and to looks for shapes in the environment (usually using [Env.shape_of_path]). - Completely reduce the shape: [let shape = My_reduce.(weak_)reduce env shape] - The [Uid.t] stored in the reduced shape should be the one of the definition. However, if the [approximate] field of the reduced shape is [true] then the [Uid.t] will not correspond to the definition, but to the closest parent module's uid. This happens when Shape reduction gets stuck, for example when hitting first-class modules. - The location of the definition can be easily found with the [cmt_format.cmt_uid_to_decl] table of the corresponding compilation unit. See: - {{:https://icfp22.sigplan.org/details/mlfamilyworkshop-2022-papers/10/Module-Shapes-for-Modern-Tooling} the design document} - {{:https://www.lix.polytechnique.fr/Labo/Gabriel.Scherer/research/shapes/2022-ml-workshop-shapes-talk.pdf} a talk about the reduction strategy Ej m* A [Uid.t] is associated to every declaration in signatures and implementations. They uniquely identify bindings in the program. When associated with these bindings' locations they are useful to external tools when trying to jump to an identifier's declaration or definition. They are stored to that effect in the [uid_to_decl] table of cmt files. f E* Whether the name of a component of that kind can appear in a type.  * Shape's items are elements of a structure or, in the case of constructors and labels, elements of a record or variants definition seen as a structure. These structures model module components and nested types' constructors and labels. k4 Smart constructors EvEw@ * This function returns the shape corresponding to a given path. It requires a callback to find shapes in the environment. It is generally more useful to rely directly on the [Env.shape_of_path] function to get the shape associated with a given path. @-./boot/ocamlc)-nostdlib"-I&./boot*-use-prims2runtime/primitives"-g0-strict-sequence*-principal(-absname"-w8+a-4-9-40-41-42-44-45-48+-warn-error"+a*-bin-annot/-strict-formats"-I&typing"-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_events"-cEE T/home/teraram/ci/builds/workspace/parallel-build/flambda/false/label/ocaml-manycores >10/.-,+*)('&%$#"! @@0V ΅k|V3EEEEEEEE@E@@8CamlinternalFormatBasics0|.e1R$|o*Format_doc0uy@GmWUࠠBӐ0>ЃzV)j⠠,Identifiable0]/*N 0k.tbGmᠠF0 M``ll&Stdlib0t0VoS%{<F:.Stdlib__Buffer0,I[?z.Stdlib__Domain0'Ϳo\0m.K.Stdlib__Either0HD ?|>.Stdlib__Format00FClW/Stdlib__Hashtbl0(L%bԠ+Stdlib__Map0*4ɇ2ɠCϐ0'T Χ@aR@0 M``llAeBnBDD@ 6 D-C@{@W@@ I ۓDEC@@i@fǰŒ "@DjD @%@ @@B|DDD@@@JݰDDJ@ڐBԓQ@v !װDtD@Ow D BC1@  ,2`@@L_ %@ @ByCEC~@ (   @  Lz@%2@|ȰP@  @1hn@J@ Ր @  2@@@͐:lvCD!DD@ې#ݓ/ג@+ v )@@@9/k@@q 8 @DD@ϐ7+@K@C0CJ@. K ͓  @ r 1@C֐D@@!@:q@!x n 3@@    O@d@l˰ V (@w@P>@   ϐ   '@@BC @@P@@